+#define debug_propro(l, f, obj, proxy, off, val)
+#endif
+
+php_property_proxy_t *php_property_proxy_init(zval *container, zend_string *member)
+{
+ php_property_proxy_t *proxy = ecalloc(1, sizeof(*proxy));
+#if DEBUG_PROPRO
+ zval offset;
+
+ ZVAL_STR_COPY(&offset, member);
+#endif
+
+ debug_propro(1, "init", NULL, proxy, &offset, NULL);
+
+ ZVAL_COPY(&proxy->container, container);
+ proxy->member = zend_string_copy(member);
+
+ debug_propro(-1, "init", NULL, proxy, &offset, NULL);
+
+#if DEBUG_PROPRO
+ zval_dtor(&offset);
+#endif
+
+ return proxy;
+}
+
+void php_property_proxy_free(php_property_proxy_t **proxy)
+{
+#if DEBUG_PROPRO
+ zval offset;
+
+ ZVAL_STR_COPY(&offset, (*proxy)->member);
+ debug_propro(1, "dtor", NULL, *proxy, &offset, NULL);
+#endif
+
+ if (*proxy) {
+ zval_ptr_dtor(&(*proxy)->container);
+
+ ZVAL_UNDEF(&(*proxy)->container);
+ zend_string_release((*proxy)->member);
+ (*proxy)->member = NULL;
+ efree(*proxy);
+ *proxy = NULL;
+ }
+
+#if DEBUG_PROPRO
+ debug_propro(-1, "dtor", NULL, NULL, &offset, NULL);
+
+ zval_dtor(&offset);