Commit: 14766e1417c721d9643f6a2a785db3e88b565814
Author: Nikita Popov <ni...@php.net> Sat, 23 Jun 2012 14:43:52 +0200
Parents: 04e781f0e4a4ea879c5e85b8d209b9b44cc32f8d
Branches: master
Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=14766e1417c721d9643f6a2a785db3e88b565814
Log:
Pass zend_generator directly to Zend VM
Previously the zval* of the generator was passed into the VM by misusing
EG(return_value_ptr_ptr). Now the zend_generator* itself is directly passed
in. This saves us from always having to pass the zval* around everywhere.
Changed paths:
M Zend/zend_generators.c
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 10d91f5..487975e 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -321,7 +321,7 @@ static zend_function *zend_generator_get_constructor(zval
*object TSRMLS_DC) /*
}
/* }}} */
-static void zend_generator_resume(zval *object, zend_generator *generator
TSRMLS_DC) /* {{{ */
+static void zend_generator_resume(zend_generator *generator TSRMLS_DC) /* {{{
*/
{
/* The generator is already closed, thus can't resume */
if (!generator->execute_data) {
@@ -352,7 +352,7 @@ static void zend_generator_resume(zval *object,
zend_generator *generator TSRMLS
/* We (mis)use the return_value_ptr_ptr to provide the
generator object
* to the executor, so YIELD will be able to set the yielded
value */
- EG(return_value_ptr_ptr) = &object;
+ EG(return_value_ptr_ptr) = (zval **) generator;
/* Set executor globals */
EG(current_execute_data) = generator->execute_data;
@@ -399,10 +399,10 @@ static void zend_generator_resume(zval *object,
zend_generator *generator TSRMLS
}
/* }}} */
-static void zend_generator_ensure_initialized(zval *object, zend_generator
*generator TSRMLS_DC) /* {{{ */
+static void zend_generator_ensure_initialized(zend_generator *generator
TSRMLS_DC) /* {{{ */
{
if (!generator->value) {
- zend_generator_resume(object, generator TSRMLS_CC);
+ zend_generator_resume(generator TSRMLS_CC);
}
}
/* }}} */
@@ -411,17 +411,15 @@ static void zend_generator_ensure_initialized(zval
*object, zend_generator *gene
* Rewind the generator */
ZEND_METHOD(Generator, rewind)
{
- zval *object;
zend_generator *generator;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
/* Generators aren't rewindable, so rewind() only has to make sure that
* the generator is initialized, nothing more */
@@ -432,17 +430,15 @@ ZEND_METHOD(Generator, rewind)
* Check whether the generator is valid */
ZEND_METHOD(Generator, valid)
{
- zval *object;
zend_generator *generator;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
RETURN_BOOL(generator->value != NULL);
}
@@ -452,17 +448,15 @@ ZEND_METHOD(Generator, valid)
* Get the current value */
ZEND_METHOD(Generator, current)
{
- zval *object;
zend_generator *generator;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
if (generator->value) {
RETURN_ZVAL(generator->value, 1, 0);
@@ -474,17 +468,15 @@ ZEND_METHOD(Generator, current)
* Get the current key */
ZEND_METHOD(Generator, key)
{
- zval *object;
zend_generator *generator;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
if (generator->key) {
RETURN_ZVAL(generator->key, 1, 0);
@@ -496,19 +488,17 @@ ZEND_METHOD(Generator, key)
* Advances the generator */
ZEND_METHOD(Generator, next)
{
- zval *object;
zend_generator *generator;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
- zend_generator_resume(object, generator TSRMLS_CC);
+ zend_generator_resume(generator TSRMLS_CC);
}
/* }}} */
@@ -516,17 +506,16 @@ ZEND_METHOD(Generator, next)
* Sends a value to the generator */
ZEND_METHOD(Generator, send)
{
- zval *object, *value;
+ zval *value;
zend_generator *generator;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) ==
FAILURE) {
return;
}
- object = getThis();
- generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+ generator = (zend_generator *) zend_object_store_get_object(getThis()
TSRMLS_CC);
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
/* The generator is already closed, thus can't send anything */
if (!generator->execute_data) {
@@ -541,7 +530,7 @@ ZEND_METHOD(Generator, send)
generator->send_target->var.ptr = value;
generator->send_target->var.ptr_ptr = &value;
- zend_generator_resume(object, generator TSRMLS_CC);
+ zend_generator_resume(generator TSRMLS_CC);
if (generator->value) {
RETURN_ZVAL(generator->value, 1, 0);
@@ -568,22 +557,27 @@ ZEND_METHOD(Generator, close)
typedef struct _zend_generator_iterator {
zend_object_iterator intern;
- zend_generator *generator;
+
+ /* The generator object zval has to be stored, because the iterator is
+ * holding a ref to it, which has to be dtored. */
+ zval *object;
} zend_generator_iterator;
static void zend_generator_iterator_dtor(zend_object_iterator *iterator
TSRMLS_DC) /* {{{ */
{
- zval_ptr_dtor((zval **) &iterator->data);
+ zval *object = ((zend_generator_iterator *) iterator)->object;
+
+ zval_ptr_dtor(&object);
+
efree(iterator);
}
/* }}} */
static int zend_generator_iterator_valid(zend_object_iterator *iterator
TSRMLS_DC) /* {{{ */
{
- zval *object = (zval *) iterator->data;
- zend_generator *generator = ((zend_generator_iterator *)
iterator)->generator;
+ zend_generator *generator = (zend_generator *) iterator->data;
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
return generator->value != NULL ? SUCCESS : FAILURE;
}
@@ -591,10 +585,9 @@ static int
zend_generator_iterator_valid(zend_object_iterator *iterator TSRMLS_D
static void zend_generator_iterator_get_data(zend_object_iterator *iterator,
zval ***data TSRMLS_DC) /* {{{ */
{
- zval *object = (zval *) iterator->data;
- zend_generator *generator = ((zend_generator_iterator *)
iterator)->generator;
+ zend_generator *generator = (zend_generator *) iterator->data;
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
if (generator->value) {
*data = &generator->value;
@@ -606,10 +599,9 @@ static void
zend_generator_iterator_get_data(zend_object_iterator *iterator, zva
static int zend_generator_iterator_get_key(zend_object_iterator *iterator,
char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) /* {{{ */
{
- zval *object = (zval *) iterator->data;
- zend_generator *generator = ((zend_generator_iterator *)
iterator)->generator;
+ zend_generator *generator = (zend_generator *) iterator->data;
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
if (!generator->key) {
return HASH_KEY_NON_EXISTANT;
@@ -628,18 +620,17 @@ static int
zend_generator_iterator_get_key(zend_object_iterator *iterator, char
/* Waiting for Etienne's patch to allow arbitrary zval keys. Until then
* error out on non-int and non-string keys. */
- zend_error(E_ERROR, "Currently only int and string keys can be
yielded");
+ zend_error_noreturn(E_ERROR, "Currently only int and string keys can be
yielded");
}
/* }}} */
static void zend_generator_iterator_move_forward(zend_object_iterator
*iterator TSRMLS_DC) /* {{{ */
{
- zval *object = (zval *) iterator->data;
- zend_generator *generator = ((zend_generator_iterator *)
iterator)->generator;
+ zend_generator *generator = (zend_generator *) iterator->data;
- zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ zend_generator_ensure_initialized(generator TSRMLS_CC);
- zend_generator_resume(object, generator TSRMLS_CC);
+ zend_generator_resume(generator TSRMLS_CC);
}
/* }}} */
@@ -655,18 +646,22 @@ static zend_object_iterator_funcs
zend_generator_iterator_functions = {
zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval
*object, int by_ref TSRMLS_DC) /* {{{ */
{
zend_generator_iterator *iterator;
+ zend_generator *generator;
if (by_ref) {
zend_error(E_ERROR, "By reference iteration of generators is
currently not supported");
}
+ generator = (zend_generator *) zend_object_store_get_object(object
TSRMLS_CC);
+
iterator = emalloc(sizeof(zend_generator_iterator));
iterator->intern.funcs = &zend_generator_iterator_functions;
+ iterator->intern.data = (void *) generator;
+ /* We have to keep a reference to the generator object zval around,
+ * otherwise the generator may be destroyed during iteration. */
Z_ADDREF_P(object);
- iterator->intern.data = (void *) object;
-
- iterator->generator = zend_object_store_get_object(object TSRMLS_CC);
+ iterator->object = object;
return (zend_object_iterator *) iterator;
}
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index cb24eb9..015263f 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2819,7 +2819,7 @@ ZEND_VM_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -4998,7 +4998,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
* arguments that have to be dtor'ed) starts */
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* For generators the next stack frame is conveniently stored
in the
* generator object. */
@@ -5087,7 +5087,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
/* For generators skip the leave handler return directly */
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in
return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -5318,7 +5318,7 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED,
CONST|TMP|VAR|CV|UNUSE
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 3bf89d3..29b6d7c 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1061,7 +1061,7 @@ static int ZEND_FASTCALL
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
* arguments that have to be dtor'ed) starts */
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* For generators the next stack frame is conveniently stored
in the
* generator object. */
@@ -1150,7 +1150,7 @@ static int ZEND_FASTCALL
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
/* For generators skip the leave handler return directly */
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in
return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -2371,7 +2371,7 @@ static int ZEND_FASTCALL
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -4119,7 +4119,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLE
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -4760,7 +4760,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -5726,7 +5726,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -6387,7 +6387,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDL
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -7087,7 +7087,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_A
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -7426,7 +7426,7 @@ static int ZEND_FASTCALL
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -9095,7 +9095,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -9736,7 +9736,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -10702,7 +10702,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -11229,7 +11229,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -11867,7 +11867,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -12386,7 +12386,7 @@ static int ZEND_FASTCALL
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -15731,7 +15731,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -17759,7 +17759,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -20167,7 +20167,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -21254,7 +21254,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -23331,7 +23331,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -24767,7 +24767,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDL
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -26026,7 +26026,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -27285,7 +27285,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -27656,7 +27656,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HAND
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -28912,7 +28912,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -29412,7 +29412,7 @@ static int ZEND_FASTCALL
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
if (EX(op_array)->fn_flags & ZEND_ACC_GENERATOR) {
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *)
EG(return_value_ptr_ptr);
/* Close the generator to free up resources */
zend_generator_close(generator, 1 TSRMLS_CC);
@@ -32377,7 +32377,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -34275,7 +34275,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -36552,7 +36552,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -37499,7 +37499,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
@@ -39445,7 +39445,7 @@ static int ZEND_FASTCALL
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
USE_OPLINE
/* The generator object is stored in return_value_ptr_ptr */
- zend_generator *generator = (zend_generator *)
zend_object_store_get_object(*EG(return_value_ptr_ptr) TSRMLS_CC);
+ zend_generator *generator = (zend_generator *) EG(return_value_ptr_ptr);
/* Destroy the previously yielded value */
if (generator->value) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php