diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-01-11 17:27:26 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-01-11 17:27:26 +0300 |
commit | 6ba10a03e7b14089e2f53305dec9a6ec06a7eb64 (patch) | |
tree | 9a8da85cf1145c0e52691d6ece4553ac8cc8234b /Zend/zend_closures.c | |
parent | da8204ba1c5e688164b14bd914900df7b84047cb (diff) | |
download | php-git-6ba10a03e7b14089e2f53305dec9a6ec06a7eb64.tar.gz |
Revert "Use ZEND_CLOSURE_OBJECT() macro to resolve closure op_array to closure object through address calculation, instead of op_array->prototype reuse." (this patch is incomplete or wrong)
This reverts commit 781e1573afdc7c336b3577ceabc9c65cafea17e8.
Diffstat (limited to 'Zend/zend_closures.c')
-rw-r--r-- | Zend/zend_closures.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index d471718783..b60107c9e5 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -639,7 +639,7 @@ void zend_register_closure_ce(void) /* {{{ */ static ZEND_NAMED_FUNCTION(zend_closure_internal_handler) /* {{{ */ { - zend_closure *closure = (zend_closure*)ZEND_CLOSURE_OBJECT(EX(func)); + zend_closure *closure = (zend_closure*)EX(func)->common.prototype; closure->orig_internal_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); OBJ_RELEASE((zend_object*)closure); EX(func) = NULL; @@ -662,6 +662,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent if (func->type == ZEND_USER_FUNCTION) { memcpy(&closure->func, func, sizeof(zend_op_array)); + closure->func.common.prototype = (zend_function*)closure; closure->func.common.fn_flags |= ZEND_ACC_CLOSURE; if (closure->func.op_array.static_variables) { closure->func.op_array.static_variables = @@ -676,6 +677,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent } } else { memcpy(&closure->func, func, sizeof(zend_internal_function)); + closure->func.common.prototype = (zend_function*)closure; closure->func.common.fn_flags |= ZEND_ACC_CLOSURE; /* wrap internal function handler to avoid memory leak */ if (UNEXPECTED(closure->func.internal_function.handler == zend_closure_internal_handler)) { |