From 158088ca1a5e0e7e6f9c1850d328915bfb94d5bd Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Wed, 1 Dec 1999 21:47:47 +0000 Subject: [PATCH] Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LENGTH() --- Zend/libzendts.dsp | 6 ++++-- Zend/zend_API.h | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Zend/libzendts.dsp b/Zend/libzendts.dsp index 223567df83..70e6e35021 100644 --- a/Zend/libzendts.dsp +++ b/Zend/libzendts.dsp @@ -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) diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 23278abc6e..b54942df0a 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -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))) -- 2.40.0