]> granicus.if.org Git - php/commitdiff
Fix static assignment
authorZeev Suraski <zeev@php.net>
Thu, 8 Apr 1999 00:18:29 +0000 (00:18 +0000)
committerZeev Suraski <zeev@php.net>
Thu, 8 Apr 1999 00:18:29 +0000 (00:18 +0000)
Zend/zend_compile.c
Zend/zend_execute.c

index f666adeea7240bf713b7fbf513e4802c03c6ba8c..48b7d9aea1fb758aaafa50fa3a148a6a5cfe68d0 100644 (file)
@@ -1431,7 +1431,7 @@ void do_fetch_global_or_static_variable(znode *varname, znode *static_assignment
        zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
        znode lval;
 
-       if (fetch_type==ZEND_FETCH_STATIC) {
+       if (fetch_type==ZEND_FETCH_STATIC && static_assignment) {
                zval *tmp = (zval *) emalloc(sizeof(zval));
 
                convert_to_string(&varname->u.constant);
@@ -1459,6 +1459,7 @@ void do_fetch_global_or_static_variable(znode *varname, znode *static_assignment
 
 
        do_assign_ref(NULL, &lval, &opline->result CLS_CC);
+       CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
 }
 
 
index 346b217fe06970ce56fa3b1ce8591a41145c05d3..8d6bbbbd91975335aeefd2ae7756a6bdecf41794 100644 (file)
@@ -379,6 +379,10 @@ static inline void zend_fetch_var_address(znode *result, znode *op1, znode *op2,
                        target_symbol_table = &EG(symbol_table);
                        break;
                case ZEND_FETCH_STATIC:
+                       if (!EG(active_op_array)->static_variables) {
+                               EG(active_op_array)->static_variables = (HashTable *) emalloc(sizeof(HashTable));
+                               zend_hash_init(EG(active_op_array)->static_variables, 2, NULL, PVAL_PTR_DTOR, 0);
+                       }
                        target_symbol_table = EG(active_op_array)->static_variables;
                        break;
        }