- if (!Z_ISUNDEF(obj->parent)) {
- set_proxied_value(&obj->parent, ref);
- zval_ptr_dtor(&parent_value);
- }
+ debug_propro(1, "set", obj, NULL, NULL, value);
+
+ if (obj->proxy) {
+ zval tmp, *container;
+ zend_bool separated;
+
+ Z_TRY_ADDREF_P(value);
+
+ ZVAL_UNDEF(&tmp);
+ container = get_container(object, &tmp);
+ separated = separate_container(object, container);
+ set_container_value(container, obj->proxy->member, value);
+ set_container(object, container);
+ cleanup_container(object, container, separated);
+
+ Z_TRY_DELREF_P(value);
+
+ debug_propro(0, "set", obj, NULL, NULL, value);