+#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, container);
+
+ ZVAL_COPY(&proxy->container, container);
+ if (Z_TYPE_P(container) == IS_ARRAY) {
+ HT_ALLOW_COW_VIOLATION(Z_ARRVAL_P(container));
+ }
+ proxy->member = zend_string_copy(member);
+
+ debug_propro(-1, "init", NULL, proxy, &offset, container);
+
+#if DEBUG_PROPRO
+ zval_dtor(&offset);
+#endif
+
+ return proxy;
+}
+
+void php_property_proxy_free(php_property_proxy_t **proxy)
+{
+#if DEBUG_PROPRO
+ php_property_proxy_t *proxy_ptr = *proxy;
+ zval offset;
+
+ ZVAL_STR_COPY(&offset, proxy_ptr->member);
+#endif
+
+ debug_propro(1, "dtor", NULL, *proxy, &offset, NULL);
+
+ if (*proxy) {
+ debug_propro(0, "dtor", NULL, *proxy, &offset, &(*proxy)->container);
+
+ zval_ptr_dtor(&(*proxy)->container);
+ zend_string_release((*proxy)->member);
+ efree(*proxy);
+ *proxy = NULL;
+ }
+
+ debug_propro(-1, "dtor", NULL, proxy_ptr, &offset, NULL);
+
+#if DEBUG_PROPRO
+ zval_dtor(&offset);