]> granicus.if.org Git - php/commitdiff
- Patch from Sterling. Add API calls to add zval's as array indeces/
authorAndi Gutmans <andi@php.net>
Sat, 20 Jan 2001 19:16:38 +0000 (19:16 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 20 Jan 2001 19:16:38 +0000 (19:16 +0000)
  object properties. Add _ex functions which take the string length as an
  argument for better performance.

Zend/zend_API.c
Zend/zend_API.h

index 906911cdea5f8d9bda4834b02d4caad343d014e2..54467a15eecc55948f1b2655817d79d4481ff71d 100644 (file)
@@ -227,100 +227,82 @@ ZEND_API inline int add_assoc_function(zval *arg, char *key,void (*function_ptr)
 }
 
 
-ZEND_API inline int add_assoc_long(zval *arg, char *key, long n)
+ZEND_API inline int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_LONG;
-       tmp->value.lval = n;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_LONG(tmp, n);
+       
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-
-ZEND_API inline int add_assoc_unset(zval *arg, char *key)
+ZEND_API inline int add_assoc_unset_ex(zval *arg, char *key, uint key_len)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_NULL;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_NULL(tmp);
+       
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-ZEND_API inline int add_assoc_bool(zval *arg, char *key, int b)
+ZEND_API inline int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_BOOL(tmp, b);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_BOOL;
-       tmp->value.lval = b;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-
-ZEND_API inline int add_assoc_resource(zval *arg, char *key, int r)
+ZEND_API inline int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_RESOURCE;
-       tmp->value.lval = r;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_RESOURCE(tmp, r);
+       
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
-ZEND_API inline int add_assoc_double(zval *arg, char *key, double d)
+ZEND_API inline int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_DOUBLE(tmp, d);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_DOUBLE;
-       tmp->value.dval = d;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
-ZEND_API inline int add_assoc_string(zval *arg, char *key, char *str, int duplicate)
+ZEND_API inline int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRING(tmp, str, duplicate);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
-ZEND_API inline int add_assoc_stringl(zval *arg, char *key, char *str, uint length, int duplicate)
+ZEND_API inline int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRINGL(tmp, str, length, duplicate);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-ZEND_API int add_assoc_zval(zval *arg, char *key, uint key_length, zval *value)
+ZEND_API inline int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value)
 {
-       return zend_hash_update(arg->value.ht, key, key_length, (void *) &value, sizeof(zval *), NULL);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
 }
 
 
@@ -328,11 +310,10 @@ ZEND_API inline int add_index_long(zval *arg, uint index, long n)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_LONG;
-       tmp->value.lval = n;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_LONG(tmp, n);
+
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *),NULL);
 }
 
 
@@ -340,139 +321,125 @@ ZEND_API inline int add_index_unset(zval *arg, uint index)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_NULL;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *), NULL);
-}
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_NULL(tmp);
 
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
+}
 
 ZEND_API inline int add_index_bool(zval *arg, uint index, int b)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_BOOL;
-       tmp->value.lval = b;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_BOOL(arg, b);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *),NULL);
 }
 
 
 ZEND_API inline int add_index_resource(zval *arg, uint index, int r)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_RESOURCE;
-       tmp->value.lval = r;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_RESOURCE(tmp, r);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *),NULL);
 }
 
 
 ZEND_API inline int add_index_double(zval *arg, uint index, double d)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_DOUBLE;
-       tmp->value.dval = d;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_DOUBLE(tmp, d);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *),NULL);
 }
 
 
 ZEND_API inline int add_index_string(zval *arg, uint index, char *str, int duplicate)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRING(tmp, str, duplicate);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *), NULL);
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_index_stringl(zval *arg, uint index, char *str, uint length, int duplicate)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRINGL(tmp, str, length, duplicate);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), NULL);
+}
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
+
+ZEND_API inline int add_index_zval(zval *arg, uint index, zval *value)
+{
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &value, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_next_index_long(zval *arg, long n)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_LONG;
-       tmp->value.lval = n;
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_LONG(tmp, n);
+       
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_next_index_unset(zval *arg)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_NULL;
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_NULL(tmp);
+       
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_next_index_bool(zval *arg, int b)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_BOOL;
-       tmp->value.lval = b;
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_BOOL(tmp, b);
+       
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_next_index_resource(zval *arg, int r)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_RESOURCE;
-       tmp->value.lval = r;
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_RESOURCE(tmp, r);
+       
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
 }
 
 
 ZEND_API inline int add_next_index_double(zval *arg, double d)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_DOUBLE;
-       tmp->value.dval = d;
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_DOUBLE(tmp, d);
+       
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *), NULL);
 }
 
 
@@ -480,16 +447,10 @@ ZEND_API inline int add_next_index_string(zval *arg, char *str, int duplicate)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *),NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRING(tmp, str, duplicate);
+
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *),NULL);
 }
 
 
@@ -497,200 +458,161 @@ ZEND_API inline int add_next_index_stringl(zval *arg, char *str, uint length, in
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *),NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRINGL(tmp, str, length, duplicate);
+
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &tmp, sizeof(zval *),NULL);
 }
 
 
-ZEND_API inline int add_get_assoc_string(zval *arg, char *key, char *str, void **dest, int duplicate)
+ZEND_API inline int add_next_index_zval(zval *arg, zval *value)
 {
-       zval *tmp;
+       return zend_hash_next_index_insert(Z_ARRVAL_P(arg), &value, sizeof(zval *), NULL);
+}
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), dest);
+
+ZEND_API inline int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate)
+{
+       zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRING(tmp, str, duplicate);
+       
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), dest);
 }
 
 
-ZEND_API inline int add_get_assoc_stringl(zval *arg, char *key, char *str, uint length, void **dest, int duplicate)
+ZEND_API inline int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate)
 {
        zval *tmp;
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRINGL(tmp, str, length, duplicate);
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), dest);
+       return zend_hash_update(Z_ARRVAL_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), dest);
 }
 
 
 ZEND_API inline int add_get_index_long(zval *arg, uint index, long l, void **dest)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_LONG;
-       tmp->value.lval = l;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),dest);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_LONG(tmp, l);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
 }
 
 
 ZEND_API inline int add_get_index_double(zval *arg, uint index, double d, void **dest)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_DOUBLE;
-       tmp->value.dval= d;
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),dest);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_DOUBLE(tmp, d);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
 }
 
 
 ZEND_API inline int add_get_index_string(zval *arg, uint index, char *str, void **dest, int duplicate)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),dest);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRING(tmp, str, duplicate);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *),dest);
 }
 
 
 ZEND_API inline int add_get_index_stringl(zval *arg, uint index, char *str, uint length, void **dest, int duplicate)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),dest);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_STRINGL(tmp, str, length, duplicate);
+       
+       return zend_hash_index_update(Z_ARRVAL_P(arg), index, (void *) &tmp, sizeof(zval *), dest);
 }
 
 
-ZEND_API inline int add_property_long(zval *arg, char *key, long n)
+ZEND_API inline int add_property_long_ex(zval *arg, char *key, uint key_len, long n)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_LONG;
-       tmp->value.lval = n;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_LONG(tmp, n);
+
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-ZEND_API inline int add_property_bool(zval *arg, char *key, int b)
+ZEND_API inline int add_property_bool_ex(zval *arg, char *key, uint key_len, int b)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_BOOL;
-       tmp->value.lval = b;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_BOOL(tmp, b);
+
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-ZEND_API inline int add_property_unset(zval *arg, char *key)
+ZEND_API inline int add_property_unset_ex(zval *arg, char *key, uint key_len)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_NULL;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_NULL(tmp);
+       
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
-ZEND_API inline int add_property_resource(zval *arg, char *key, long n)
+ZEND_API inline int add_property_resource_ex(zval *arg, char *key, uint key_len, long n)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_RESOURCE;
-       tmp->value.lval = n;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_RESOURCE(tmp, n);
+       
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
-ZEND_API inline int add_property_double(zval *arg, char *key, double d)
+ZEND_API inline int add_property_double_ex(zval *arg, char *key, uint key_len, double d)
 {
        zval *tmp;
-
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_DOUBLE;
-       tmp->value.dval = d;
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       
+       MAKE_STD_ZVAL(tmp);
+       ZVAL_DOUBLE(tmp, d);
+       
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
 }
 
 
-ZEND_API inline int add_property_string(zval *arg, char *key, char *str, int duplicate)
+ZEND_API inline int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = strlen(str);
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
-}
+       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);
+}
 
-ZEND_API inline int add_property_stringl(zval *arg, char *key, char *str, uint length, int duplicate)
+ZEND_API inline int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
 {
        zval *tmp;
 
-       ALLOC_ZVAL(tmp);
-       tmp->type = IS_STRING;
-       tmp->value.str.len = length;
-       if (duplicate) {
-               tmp->value.str.val = estrndup(str,tmp->value.str.len);
-       } else {
-               tmp->value.str.val = str;
-       }
-       INIT_PZVAL(tmp);
-       return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
+       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);
 }
 
+ZEND_API inline int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value)
+{
+       return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
+}
 
 ZEND_API int zend_startup_module(zend_module_entry *module)
 {
index fc7798cb7363d64445b5adf1ef33e6484bbe307f..aa5b968ec456b340d5641cad11c7ad75df19841d 100644 (file)
@@ -146,14 +146,23 @@ ZEND_API int _object_init_ex(zval *arg, zend_class_entry *ce ZEND_FILE_LINE_DC);
 /* no longer supported */
 ZEND_API int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
 
-ZEND_API int add_assoc_long(zval *arg, char *key, long n);
-ZEND_API int add_assoc_unset(zval *arg, char *key);
-ZEND_API int add_assoc_bool(zval *arg, char *key, int b);
-ZEND_API int add_assoc_resource(zval *arg, char *key, int r);
-ZEND_API int add_assoc_double(zval *arg, char *key, double d);
-ZEND_API int add_assoc_string(zval *arg, char *key, char *str, int duplicate);
-ZEND_API int add_assoc_stringl(zval *arg, char *key, char *str, uint length, int duplicate);
-ZEND_API int add_assoc_zval(zval *arg, char *key, uint key_length, zval *value);
+ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n);
+ZEND_API int add_assoc_unset_ex(zval *arg, char *key, uint key_len);
+ZEND_API int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b);
+ZEND_API int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r);
+ZEND_API int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d);
+ZEND_API int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
+ZEND_API int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
+ZEND_API int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value);
+
+#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key)+1, __n)
+#define add_assoc_unset(__arg, __key) add_assoc_unset_ex(__arg, __key, strlen(__key) + 1)
+#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key)+1, __b)
+#define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key)+1, __r)
+#define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key)+1, __d)
+#define add_assoc_string(__arg, __key, __str, __duplicate) add_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
+#define add_assoc_stringl(__arg, __key, __str, __length, __duplicate) add_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
+#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key)+1, __value)
 
 ZEND_API int add_index_long(zval *arg, uint idx, long n);
 ZEND_API int add_index_unset(zval *arg, uint idx);
@@ -170,25 +179,40 @@ ZEND_API int add_next_index_resource(zval *arg, int r);
 ZEND_API int add_next_index_double(zval *arg, double d);
 ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate);
 ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate);
+ZEND_API int add_next_index_zval(zval *arg, zval *value);
+
+ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate);
+ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate);
+
+#define add_get_assoc_string(__arg, __key, __str, __dest, __duplicate) add_get_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __dest, __duplicate)
+#define add_get_assoc_stringl(__arg, __key, __str, __length, __dest, __duplicate) add_get_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __dest, __duplicate)
 
 ZEND_API int add_get_index_long(zval *arg, uint idx, long l, void **dest);
 ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
-ZEND_API int add_get_assoc_string(zval *arg, char *key, char *str, void **dest, int duplicate);
-ZEND_API int add_get_assoc_stringl(zval *arg, char *key, char *str, uint length, void **dest, int duplicate);
 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_unset_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_unset(__arg, __key) add_assoc_property_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 call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[]);
 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);
 
-ZEND_API int add_property_long(zval *arg, char *key, long l);
-ZEND_API int add_property_unset(zval *arg, char *key);
-ZEND_API int add_property_bool(zval *arg, char *key, int b);
-ZEND_API int add_property_resource(zval *arg, char *key, long r);
-ZEND_API int add_property_double(zval *arg, char *key, double d);
-ZEND_API int add_property_string(zval *arg, char *key, char *str, int duplicate);
-ZEND_API int add_property_stringl(zval *arg, char *key, char *str, uint length, int duplicate);
-
 ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
                                   int is_ref, int num_symbol_tables, ...);