]> granicus.if.org Git - php/commitdiff
Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LENGTH()
authorZeev Suraski <zeev@php.net>
Wed, 1 Dec 1999 21:47:47 +0000 (21:47 +0000)
committerZeev Suraski <zeev@php.net>
Wed, 1 Dec 1999 21:47:47 +0000 (21:47 +0000)
Zend/libzendts.dsp
Zend/zend_API.h

index 223567df83ab5cce14630c7233d094dd4c7a6380..70e6e350217ad274c6314960f03dba3b47e94dc4 100644 (file)
@@ -288,7 +288,8 @@ InputPath=".\zend-parser.y"
 
 BuildCmds= \
        if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
-       if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
+       if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y \
+       
 
 "$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
    $(BuildCmds)
@@ -305,7 +306,8 @@ InputPath=".\zend-parser.y"
 
 BuildCmds= \
        if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
-       if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
+       if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y \
+       
 
 "$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
    $(BuildCmds)
index 23278abc6ebf2d99fa744980e6de2df75ccbe964..b54942df0ad01b288d86cee77f7dc4c8f540a899 100644 (file)
@@ -243,25 +243,28 @@ ZEND_API int add_property_stringl(zval *arg, char *key, char *str, uint length,
        {                                                                                                                                                       \
                char *_name = (name);                                                                                                   \
                                                                                                                                                                \
-               ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var);             \
+               ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 0);  \
        }
 
 
-#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var)                                                                  \
+#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount)                                                                       \
        {                                                                                                                                                                                                       \
                zval **orig_var;                                                                                                                                                                \
                                                                                                                                                                                                                \
                if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS                               \
                        && PZVAL_IS_REF(*orig_var)) {                                                                                                                           \
-                       (var)->refcount = (*orig_var)->refcount;                                                                                                                \
+                       (var)->refcount = (*orig_var)->refcount;                                                                                                        \
                        (var)->is_ref = 1;                                                                                                                                                      \
                                                                                                                                                                                                                \
                        zval_dtor(*orig_var);                                                                                                                                           \
-                       **orig_var = *(var);                                                                                                                                                    \
+                       **orig_var = *(var);                                                                                                                                            \
                        efree(var);                                                                                                                                                                     \
                } else {                                                                                                                                                                                \
                        INIT_PZVAL((var));                                                                                                                                                      \
-                       zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL);                                \
+                       if (_refcount) {                                                                                                                                                        \
+                               (var)->refcount = _refcount;                                                                                                                    \
+                       }                                                                                                                                                                                       \
+                       zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL);                        \
                }                                                                                                                                                                                               \
        }
 
@@ -269,8 +272,8 @@ ZEND_API int add_property_stringl(zval *arg, char *key, char *str, uint length,
 #define ZEND_SET_GLOBAL_VAR(name, var)                         \
        ZEND_SET_SYMBOL(&EG(symbol_table), name, var)
 
-#define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var)                \
-       ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var)
+#define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var, _refcount)             \
+       ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var, _refcount)
 
 #define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? (p)->value.obj.properties : NULL)))