summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>1999-06-09 19:26:54 +0000
committerAndi Gutmans <andi@php.net>1999-06-09 19:26:54 +0000
commit7ed492344126557e111e462675a5a4d93114ea0d (patch)
treec8eebeaf06a9c4263537c246b89f55475b641949
parent835b0d8823a9a9fdb7b1903fcbe193256b5fe1a2 (diff)
downloadphp-git-7ed492344126557e111e462675a5a4d93114ea0d.tar.gz
- Fix the static array() initializing
-rw-r--r--Zend/zend-parser.y4
-rw-r--r--Zend/zend_compile.c2
-rw-r--r--Zend/zend_compile.h2
-rw-r--r--Zend/zend_operators.c4
4 files changed, 6 insertions, 6 deletions
diff --git a/Zend/zend-parser.y b/Zend/zend-parser.y
index 1fd9bbb316..43d38a5421 100644
--- a/Zend/zend-parser.y
+++ b/Zend/zend-parser.y
@@ -491,9 +491,9 @@ static_array_pair_list:
non_empty_static_array_pair_list:
non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { do_add_static_array_element(&$$, &$3, &$5); }
- | non_empty_static_array_pair_list ',' static_scalar { do_add_static_array_element(&$$, &$3, NULL); }
+ | non_empty_static_array_pair_list ',' static_scalar { do_add_static_array_element(&$$, NULL, &$3); }
| static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; array_init(&$$.u.constant); do_add_static_array_element(&$$, &$1, &$3); }
- | static_scalar { $$.op_type = IS_CONST; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; array_init(&$$.u.constant); do_add_static_array_element(&$$, &$1, NULL); }
+ | static_scalar { $$.op_type = IS_CONST; $$.u.constant.refcount=1; $$.u.constant.is_ref=0; array_init(&$$.u.constant); do_add_static_array_element(&$$, NULL, &$1); }
;
expr:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index ddc09edbe6..28043472f6 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1418,7 +1418,7 @@ void do_add_array_element(znode *result, znode *expr, znode *offset CLS_DC)
-void do_add_static_array_element(znode *result, znode *expr, znode *offset)
+void do_add_static_array_element(znode *result, znode *offset, znode *expr)
{
zval *element = (zval *) emalloc(sizeof(zval));
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 1b704447e6..adc06080fb 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -300,7 +300,7 @@ void do_shell_exec(znode *result, znode *cmd CLS_DC);
void do_init_array(znode *result, znode *expr, znode *offset CLS_DC);
void do_add_array_element(znode *result, znode *expr, znode *offset CLS_DC);
-void do_add_static_array_element(znode *result, znode *expr, znode *offset);
+void do_add_static_array_element(znode *result, znode *offset, znode *expr);
void do_list_init();
void do_list_end(znode *result, znode *expr CLS_DC);
void do_add_list_element(znode *element CLS_DC);
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 364848bf08..b88c52cded 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -431,9 +431,9 @@ ZEND_API int add_function(zval *result, zval *op1, zval *op2)
if (op1->type == IS_ARRAY && op2->type == IS_ARRAY) {
zval tmp;
- zend_hash_merge(op1->value.ht,op2->value.ht,(void (*)(void *pData)) zval_copy_ctor, (void *) &tmp, sizeof(zval), 0);
*result = *op1;
- zval_dtor(op2);
+ zval_copy_ctor(result);
+ zend_hash_merge(result->value.ht,op2->value.ht,(void (*)(void *pData)) zval_copy_ctor, (void *) &tmp, sizeof(zval), 0);
return SUCCESS;
}
zendi_convert_scalar_to_number(op1, op1_copy);