diff options
Diffstat (limited to 'Zend/zend_closures.c')
-rw-r--r-- | Zend/zend_closures.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index b5f7e0ea0e..f0fba8e174 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -136,8 +136,7 @@ static zend_function *zend_closure_get_method(zval **object_ptr, char *method_na static zval *zend_closure_read_property(zval *object, zval *member, int type TSRMLS_DC) /* {{{ */ { ZEND_CLOSURE_PROPERTY_ERROR(); - Z_ADDREF(EG(uninitialized_zval)); - return &EG(uninitialized_zval); + return NULL; } /* }}} */ @@ -209,7 +208,7 @@ static zend_object_value zend_closure_new(zend_class_entry *class_type TSRMLS_DC } /* }}} */ -int zend_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC) /* {{{ */ +int zend_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval **zobj_ptr, zval ***zobj_ptr_ptr TSRMLS_DC) /* {{{ */ { zend_closure *closure; @@ -224,11 +223,17 @@ int zend_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function if (zobj_ptr) { *zobj_ptr = closure->this_ptr; } + if (zobj_ptr_ptr) { + *zobj_ptr_ptr = &closure->this_ptr; + } *ce_ptr = Z_OBJCE_P(closure->this_ptr); } else { if (zobj_ptr) { *zobj_ptr = NULL; } + if (zobj_ptr_ptr) { + *zobj_ptr_ptr = NULL; + } *ce_ptr = closure->func.common.scope; } return SUCCESS; |