zend_object *zobj;
zval tmp_member;
zval *retval;
- uint32_t property_offset;
+ uintptr_t property_offset;
+ uint32_t *guard = NULL;
zobj = Z_OBJ_P(object);
/* magic isset */
if ((type == BP_VAR_IS) && zobj->ce->__isset) {
- zval tmp_object, tmp_result;
+ zval tmp_result;
- uint32_t *guard = zend_get_property_guard(zobj, Z_STR_P(member));
+ guard = zend_get_property_guard(zobj, Z_STR_P(member));
if (!((*guard) & IN_ISSET)) {
- ZVAL_COPY(&tmp_object, object);
ZVAL_UNDEF(&tmp_result);
*guard |= IN_ISSET;
/* magic get */
if (zobj->ce->__get) {
- uint32_t *guard = zend_get_property_guard(zobj, Z_STR_P(member));
+ if (guard == NULL) {
+ guard = zend_get_property_guard(zobj, Z_STR_P(member));
+ }
if (!((*guard) & IN_GET)) {
- zval tmp_object;
-
/* have getter - try with it! */
- ZVAL_COPY(&tmp_object, object);
*guard |= IN_GET; /* prevent circular getting */
- zend_std_call_getter(&tmp_object, member, rv);
+ zend_std_call_getter(object, member, rv);
*guard &= ~IN_GET;
if (Z_TYPE_P(rv) != IS_UNDEF) {