X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=php_propro.c;h=29627bad4b03a42a246118f3ead4f3bdd6e704f8;hb=d9cb4d61eaeabdfa0c12636668c9f4a29a253932;hp=090b0dabe8e868e55a32acab7ddbd7003156a2f7;hpb=570d20ee590ab1b9636272be745ab1bb73bbc683;p=m6w6%2Fext-propro diff --git a/php_propro.c b/php_propro.c index 090b0da..29627ba 100644 --- a/php_propro.c +++ b/php_propro.c @@ -50,18 +50,6 @@ void php_property_proxy_free(php_property_proxy_t **proxy) } } -zval *php_property_proxy_zval(zval *container, zend_string *member) -{ - php_property_proxy_t *proxy; - php_property_proxy_object_t *proxy_obj; - - proxy = php_property_proxy_init(container, member); - proxy_obj = php_property_proxy_object_new_ex(NULL, proxy); - - ZVAL_OBJ(&proxy_obj->myself, &proxy_obj->zo); - return &proxy_obj->myself; -} - static zend_class_entry *php_property_proxy_class_entry; static zend_object_handlers php_property_proxy_object_handlers; @@ -354,7 +342,7 @@ static void set_proxied_value(zval *object, zval *value) static zval *read_dimension(zval *object, zval *offset, int type, zval *return_value) { zval proxied_value; - zval *o = offset; + zend_string *member = offset ? zval_get_string(offset) : NULL; debug_propro(1, type == BP_VAR_R ? "dim_read" : "dim_read_ref", get_propro(object), offset, NULL); @@ -362,21 +350,16 @@ static zval *read_dimension(zval *object, zval *offset, int type, zval *return_v ZVAL_UNDEF(&proxied_value); get_proxied_value(object, &proxied_value); - if (o) { - convert_to_string_ex(o); - } - - if (BP_VAR_R == type && o && !Z_ISUNDEF(proxied_value)) { + if (BP_VAR_R == type && member && !Z_ISUNDEF(proxied_value)) { if (Z_TYPE(proxied_value) == IS_ARRAY) { zval *hash_value = zend_symtable_find(Z_ARRVAL(proxied_value), - Z_STR_P(o)); + member); if (hash_value) { RETVAL_ZVAL(hash_value, 1, 0); } } } else { - zend_string *member; php_property_proxy_t *proxy; php_property_proxy_object_t *proxy_obj; @@ -388,9 +371,7 @@ static zval *read_dimension(zval *object, zval *offset, int type, zval *return_v set_proxied_value(object, &proxied_value); } - if (o) { - member = Z_STR_P(o); - } else { + if (!member) { member = zend_long_to_str(zend_hash_next_free_element( Z_ARRVAL(proxied_value))); } @@ -398,17 +379,13 @@ static zval *read_dimension(zval *object, zval *offset, int type, zval *return_v proxy = php_property_proxy_init(&proxied_value, member); zval_ptr_dtor(&proxied_value); - if (!o) { - zend_string_release(member); - } - proxy_obj = php_property_proxy_object_new_ex(NULL, proxy); ZVAL_COPY(&proxy_obj->parent, object); RETVAL_OBJ(&proxy_obj->zo); } - if (o && o != offset) { - zval_ptr_dtor(o); + if (member) { + zend_string_release(member); } debug_propro(-1, type == BP_VAR_R ? "dim_read" : "dim_read_ref",