+static void destroy_obj(zend_object *object)
+{
+ php_property_proxy_object_t *o = PHP_PROPRO_PTR(object);
+
+ debug_propro(0, "dtor", o, NULL, NULL);
+
+ if (o->proxy) {
+ php_property_proxy_free(&o->proxy);
+ }
+ if (!Z_ISUNDEF(o->parent)) {
+ zval_ptr_dtor(&o->parent);
+ ZVAL_UNDEF(&o->parent);
+ }
+ zend_object_std_dtor(object);
+}
+
+static inline php_property_proxy_object_t *get_propro(zval *object)
+{
+ object = get_referenced_zval(object);
+ switch (Z_TYPE_P(object)) {
+ case IS_OBJECT:
+ break;
+
+ EMPTY_SWITCH_DEFAULT_CASE();
+ }
+ return PHP_PROPRO_PTR(Z_OBJ_P(object));
+}
+
+static inline zend_bool got_value(zval *container, zval *value)