summaryrefslogtreecommitdiff
path: root/ext/reflection/php_reflection.c
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-04-10 13:01:54 +0200
committerNikita Popov <nikic@php.net>2016-04-15 15:32:20 +0200
commit64f91774f225e78a79c3623b185ae8b64ef9e30b (patch)
treea0947c110c53409cbdc585b20a9800adf11e5fac /ext/reflection/php_reflection.c
parentfd2cd354291d77f8949f905b50218e74463f3e7a (diff)
downloadphp-git-64f91774f225e78a79c3623b185ae8b64ef9e30b.tar.gz
Remove IS_VAR_RET_REF flag
Instead decide whether a function returned by reference or by value by checking whether the return value has REFERENCE type. This means that functions returning by reference must always return a reference and functions returning by value must not return a reference.
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r--ext/reflection/php_reflection.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index dd3bd6e94d..186df87fd7 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -5647,7 +5647,9 @@ ZEND_METHOD(reflection_property, getValue)
php_error_docref(NULL, E_ERROR, "Internal error: Could not find the property %s::%s", ZSTR_VAL(intern->ce->name), ZSTR_VAL(ref->prop.name));
/* Bails out */
}
- ZVAL_DUP(return_value, &CE_STATIC_MEMBERS(intern->ce)[ref->prop.offset]);
+ member_p = &CE_STATIC_MEMBERS(intern->ce)[ref->prop.offset];
+ ZVAL_DEREF(member_p);
+ ZVAL_COPY(return_value, member_p);
} else {
const char *class_name, *prop_name;
size_t prop_name_len;
@@ -5659,7 +5661,8 @@ ZEND_METHOD(reflection_property, getValue)
zend_unmangle_property_name_ex(ref->prop.name, &class_name, &prop_name, &prop_name_len);
member_p = zend_read_property(ref->ce, object, prop_name, prop_name_len, 1, &rv);
- ZVAL_DUP(return_value, member_p);
+ ZVAL_DEREF(member_p);
+ ZVAL_COPY(return_value, member_p);
}
}
/* }}} */