]> granicus.if.org Git - php/commitdiff
Bring static scalar arrays in line
authorNikita Popov <nikic@php.net>
Thu, 26 Jun 2014 11:16:31 +0000 (13:16 +0200)
committerNikita Popov <nikic@php.net>
Thu, 26 Jun 2014 11:20:39 +0000 (13:20 +0200)
Zend/zend_ast.c
Zend/zend_language_parser.y

index ee8dd662c1bfd18e2a8cf17b7bdc8dd6bb2b1e6a..ec3e9dbc84583cecc7cc8f9e2c3e622cddf9f172 100644 (file)
@@ -242,17 +242,18 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s
                        sub_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op2);
                        break;
-               case ZEND_INIT_ARRAY:
+               case ZEND_AST_ARRAY:
                        array_init(result);
                        {
-                               int i;
-                               for (i = 0; i < ast->children; i+=2) {
-                                       if (ast->child[i]) {
-                                               zend_ast_evaluate(&op1, ast->child[i], scope TSRMLS_CC);
+                               zend_uint i;
+                               for (i = 0; i < ast->children; i++) {
+                                       zend_ast *elem = ast->child[i];
+                                       if (elem->child[1]) {
+                                               zend_ast_evaluate(&op1, elem->child[1], scope TSRMLS_CC);
                                        } else {
                                                ZVAL_UNDEF(&op1);
                                        }
-                                       zend_ast_evaluate(&op2, ast->child[i+1], scope TSRMLS_CC);
+                                       zend_ast_evaluate(&op2, elem->child[0], scope TSRMLS_CC);
                                        zend_ast_add_array_element(result, &op1, &op2 TSRMLS_CC);
                                }
                        }
index 8564ad99197593f21dfb75895ca29f560d924a41..5edc41e59723d0d5c04ec9838807d8fd2577de35 100644 (file)
@@ -993,9 +993,9 @@ static_scalar_base:
 static_scalar_value:
                static_scalar_base { $$.u.ast = zend_ast_create_constant(&$1.u.constant); }
        |       common_scalar { $$.u.ast = $1.u.ast; }
-       |       T_ARRAY '(' static_array_pair_list ')' { $$ = $3; }
-       |       '[' static_array_pair_list ']' { $$ = $2; }
-       |       static_operation { $$ = $1; }
+       |       T_ARRAY '(' static_array_pair_list ')' { $$.u.ast = $3.u.ast; }
+       |       '[' static_array_pair_list ']' { $$.u.ast = $2.u.ast; }
+       |       static_operation { $$.u.ast = $1.u.ast; }
 ;
 
 static_operation:
@@ -1088,8 +1088,10 @@ scalar:
 
 
 static_array_pair_list:
-               /* empty */ { $$.op_type = IS_CONST; array_init(&$$.u.constant); $$.u.ast = zend_ast_create_constant(&$$.u.constant); }
-       |       non_empty_static_array_pair_list possible_comma { zend_ast_dynamic_shrink(&$1.u.ast); $$ = $1; }
+               /* empty */
+                       { array_init(&$$.u.constant); $$.u.ast = zend_ast_create_constant(&$$.u.constant); }
+       |       non_empty_static_array_pair_list possible_comma
+                       { zend_ast_dynamic_shrink(&$1.u.ast); $$ = $1; }
 ;
 
 possible_comma:
@@ -1098,16 +1100,17 @@ possible_comma:
 ;
 
 non_empty_static_array_pair_list:
-               non_empty_static_array_pair_list ',' static_scalar_value T_DOUBLE_ARROW static_scalar_value
-                       { $$.u.ast = zend_ast_dynamic_add(zend_ast_dynamic_add($1.u.ast, $3.u.ast), $5.u.ast); }
-       |       non_empty_static_array_pair_list ',' static_scalar_value
-                       { $$.u.ast = zend_ast_dynamic_add(zend_ast_dynamic_add($1.u.ast, NULL), $3.u.ast); }
-       |       static_scalar_value T_DOUBLE_ARROW static_scalar_value
-                       { $$.u.ast = zend_ast_dynamic_add(zend_ast_create_dynamic_and_add(
-                             ZEND_INIT_ARRAY, $1.u.ast), $3.u.ast); }
+               non_empty_static_array_pair_list ',' static_array_pair
+                       { $$.u.ast = zend_ast_dynamic_add($1.u.ast, $3.u.ast); }
+       |       static_array_pair
+                       { $$.u.ast = zend_ast_create_dynamic_and_add(ZEND_AST_ARRAY, $1.u.ast); }
+;
+
+static_array_pair:
+               static_scalar_value T_DOUBLE_ARROW static_scalar_value
+                       { $$.u.ast = zend_ast_create_binary(ZEND_AST_ARRAY_ELEM, $3.u.ast, $1.u.ast); }
        |       static_scalar_value
-                       { $$.u.ast = zend_ast_dynamic_add(zend_ast_create_dynamic_and_add(
-                             ZEND_INIT_ARRAY, NULL), $1.u.ast); }
+                       { $$.u.ast = zend_ast_create_binary(ZEND_AST_ARRAY_ELEM, $1.u.ast, NULL); }
 ;
 
 expr: