summaryrefslogtreecommitdiff
path: root/Zend/zend_generators.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-01-11 16:25:28 +0300
committerDmitry Stogov <dmitry@zend.com>2018-01-11 16:25:28 +0300
commit781e1573afdc7c336b3577ceabc9c65cafea17e8 (patch)
treeb9738020d342fac1c28b2517687008947117e19d /Zend/zend_generators.c
parent35e70af2085300418cab4a801730dbeb05d5d222 (diff)
downloadphp-git-781e1573afdc7c336b3577ceabc9c65cafea17e8.tar.gz
Use ZEND_CLOSURE_OBJECT() macro to resolve closure op_array to closure object through address calculation, instead of op_array->prototype reuse.
Diffstat (limited to 'Zend/zend_generators.c')
-rw-r--r--Zend/zend_generators.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 755300f92b..6c2495d69d 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -24,6 +24,7 @@
#include "zend_interfaces.h"
#include "zend_exceptions.h"
#include "zend_generators.h"
+#include "zend_closures.h"
ZEND_API zend_class_entry *zend_ce_generator;
ZEND_API zend_class_entry *zend_ce_ClosedGeneratorException;
@@ -145,7 +146,7 @@ ZEND_API void zend_generator_close(zend_generator *generator, zend_bool finished
/* Free closure object */
if (EX_CALL_INFO() & ZEND_CALL_CLOSURE) {
- OBJ_RELEASE((zend_object *) EX(func)->common.prototype);
+ OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
}
/* Free GC buffer. GC for closed generators doesn't need an allocated buffer */
@@ -335,7 +336,7 @@ static HashTable *zend_generator_get_gc(zval *object, zval **table, int *n) /* {
ZVAL_OBJ(gc_buffer++, Z_OBJ(execute_data->This));
}
if (EX_CALL_INFO() & ZEND_CALL_CLOSURE) {
- ZVAL_OBJ(gc_buffer++, (zend_object *) EX(func)->common.prototype);
+ ZVAL_OBJ(gc_buffer++, ZEND_CLOSURE_OBJECT(EX(func)));
}
if (generator->node.children == 0) {