-zend_object_value php_property_proxy_object_new(zend_class_entry *ce TSRMLS_DC)
-{
- return php_property_proxy_object_new_ex(ce, NULL, NULL TSRMLS_CC);
-}
-
-static void php_property_proxy_object_free(void *object TSRMLS_DC)
-{
- php_property_proxy_object_t *o = object;
-
-#if DEBUG_PROPRO
- fprintf(stderr, "#PP %p free\n", o);
-#endif
-
- if (o->proxy) {
- php_property_proxy_free(&o->proxy);
- }
- if (o->parent) {
- zend_objects_store_del_ref_by_handle_ex(o->parent->zv.handle,
- o->parent->zv.handlers TSRMLS_CC);
- o->parent = NULL;
- }
- zend_object_std_dtor((zend_object *) o TSRMLS_CC);
- efree(o);
-}
-
-zend_object_value php_property_proxy_object_new_ex(zend_class_entry *ce,
- php_property_proxy_t *proxy, php_property_proxy_object_t **ptr TSRMLS_DC)
-{
- php_property_proxy_object_t *o;
-
- o = ecalloc(1, sizeof(*o));
- zend_object_std_init((zend_object *) o, ce TSRMLS_CC);
- object_properties_init((zend_object *) o, ce);
-
- if (ptr) {
- *ptr = o;
- }
- o->proxy = proxy;
-
- o->zv.handle = zend_objects_store_put(o, NULL,
- php_property_proxy_object_free, NULL TSRMLS_CC);
- o->zv.handlers = &php_property_proxy_object_handlers;
-
-#if DEBUG_PROPRO
- fprintf(stderr, "#PP %p init\n", o);
-#endif
-
- return o->zv;
-}
+static inline php_property_proxy_object_t *get_propro(zval *object);
+static zval *get_parent_proxied_value(zval *object, zval *return_value TSRMLS_DC);
+static zval *get_proxied_value(zval *object, zval *return_value TSRMLS_DC);
+static zval *read_dimension(zval *object, zval *offset, int type, zval *return_value TSRMLS_DC);
+static ZEND_RESULT_CODE cast_proxied_value(zval *object, zval *return_value, int type TSRMLS_DC);
+static void write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC);
+static void set_proxied_value(zval *object, zval *value TSRMLS_DC);