]> granicus.if.org Git - php/commitdiff
Make add_property_ functions work via write_property handler
authorStanislav Malyshev <stas@php.net>
Tue, 14 Jan 2003 12:15:09 +0000 (12:15 +0000)
committerStanislav Malyshev <stas@php.net>
Tue, 14 Jan 2003 12:15:09 +0000 (12:15 +0000)
Zend/zend_API.c
Zend/zend_API.h

index b3c08b14c78ed277152fa31a0147c50bbb3b3205..3d41e15f98a3f200bd4c689f1bc5eef81846f51a 100644 (file)
@@ -933,90 +933,111 @@ ZEND_API int add_get_index_stringl(zval *arg, uint index, char *str, uint length
 }
 
 
-ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n)
+ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_LONG(tmp, n);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
-ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b)
+ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_BOOL(tmp, b);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
-ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len)
+ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
        
        MAKE_STD_ZVAL(tmp);
        ZVAL_NULL(tmp);
        
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
-ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n)
+ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
        
        MAKE_STD_ZVAL(tmp);
        ZVAL_RESOURCE(tmp, n);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
 
-ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d)
+ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_DOUBLE(tmp, d);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
 
-ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
+ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_STRING(tmp, str, duplicate);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
-ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
+ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate TSRMLS_DC)
 {
        zval *tmp;
-       TSRMLS_FETCH();
+       zval z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_STRINGL(tmp, str, length, duplicate);
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       return SUCCESS;
 }
 
-ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value)
+ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC)
 {
-       TSRMLS_FETCH();
+       zval z_key;
 
-       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
+       ZVAL_STRINGL(&z_key, key, key_len, 0);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, value TSRMLS_CC);
+       return SUCCESS;
 }
 
 ZEND_API int zend_startup_module(zend_module_entry *module)
index 5695cc9b8ee697ef4bb00c8b23dd52da056516b6..58b109e98354290918a8e15a1d10eba441504c9c 100644 (file)
@@ -220,23 +220,23 @@ ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
 ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
 ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
 
-ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l);
-ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len);
-ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b);
-ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r);
-ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d);
-ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
-ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len,  char *str, uint length, int duplicate);
-ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value);
-
-#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
-#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
-#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
-#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
-#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d) 
-#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
-#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
-#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)       
+ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l TSRMLS_DC);
+ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC);
+ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC);
+ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r TSRMLS_DC);
+ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC);
+ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC);
+ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len,  char *str, uint length, int duplicate TSRMLS_DC);
+ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC);
+
+#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n TSRMLS_CC)
+#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1 TSRMLS_CC)
+#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b TSRMLS_CC)
+#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r TSRMLS_CC)
+#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d TSRMLS_CC
+#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate TSRMLS_CC)
+#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate TSRMLS_CC)
+#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value TSRMLS_CC)       
 
 ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC);
 ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);