]> granicus.if.org Git - php/commitdiff
zend_ast_dynamic_ast returns new node
authorNikita Popov <nikic@php.net>
Sat, 21 Jun 2014 17:26:17 +0000 (19:26 +0200)
committerNikita Popov <nikic@php.net>
Sat, 21 Jun 2014 17:31:08 +0000 (19:31 +0200)
Zend/zend_ast.c
Zend/zend_ast.h
Zend/zend_compile.c
Zend/zend_language_parser.y

index 84243c2793edca3a42ab7c18625de7a3f87dc74b..c2a9500feb057c3d364d2fcc562a9453bd16e6e1 100644 (file)
@@ -99,12 +99,13 @@ static inline zend_bool is_power_of_two(unsigned short n) {
        return n == (n & -n);
 }
 
-ZEND_API void zend_ast_dynamic_add(zend_ast **ast, zend_ast *op)
+ZEND_API zend_ast *zend_ast_dynamic_add(zend_ast *ast, zend_ast *op)
 {
-       if ((*ast)->children >= 4 && is_power_of_two((*ast)->children)) {
-               *ast = erealloc(*ast, sizeof(zend_ast) + sizeof(zend_ast *) * ((*ast)->children * 2 - 1));
+       if (ast->children >= 4 && is_power_of_two(ast->children)) {
+               ast = erealloc(ast, sizeof(zend_ast) + sizeof(zend_ast *) * (ast->children * 2 - 1));
        }
-       (*ast)->child[(*ast)->children++] = op;
+       ast->child[ast->children++] = op;
+       return ast;
 }
 
 ZEND_API void zend_ast_dynamic_shrink(zend_ast **ast)
index cfe0ffae14870acde2d10876b22eb5a4e2800957..d789d909d2d8ca6238ca43ed6049daad84d8c26d 100644 (file)
@@ -110,8 +110,8 @@ ZEND_API zend_ast *zend_ast_create_binary_ex(
 ZEND_API zend_ast *zend_ast_create_ternary_ex(
        zend_ast_kind kind, zend_ast_attr attr, zend_ast *op0, zend_ast *op1, zend_ast *op2);
 
-ZEND_API zend_astzend_ast_create_dynamic(zend_ast_kind kind);
-ZEND_API void zend_ast_dynamic_add(zend_ast **ast, zend_ast *op);
+ZEND_API zend_ast *zend_ast_create_dynamic(zend_ast_kind kind);
+ZEND_API zend_ast *zend_ast_dynamic_add(zend_ast *ast, zend_ast *op);
 ZEND_API void zend_ast_dynamic_shrink(zend_ast **ast);
 
 ZEND_API int zend_ast_is_ct_constant(zend_ast *ast);
@@ -136,6 +136,10 @@ static inline zend_ast *zend_ast_create_ternary(
        return zend_ast_create_ternary_ex(kind, 0, op0, op1, op2);
 }
 
+static inline zend_ast *zend_ast_create_dynamic_and_add(zend_ast_kind kind, zend_ast *op) {
+       return zend_ast_dynamic_add(zend_ast_create_dynamic(kind), op);
+}
+
 static inline zend_ast *zend_ast_create_var(zval *name) {
        return zend_ast_create_unary(ZEND_AST_VAR, zend_ast_create_constant(name));
 }
index c720196f66eb385cbfa5809d0b61d2d69f54e7fa..017967ec2318c78cbbd3f0c812102b80305a22c9 100644 (file)
@@ -7618,8 +7618,7 @@ void zend_compile_shell_exec(znode *result, zend_ast *ast TSRMLS_DC) {
 
        ZVAL_STRING(&fn_name, "shell_exec");
        name_ast = zend_ast_create_zval(&fn_name);
-       params_ast = zend_ast_create_dynamic(ZEND_AST_PARAMS);
-       zend_ast_dynamic_add(&params_ast, expr_ast);
+       params_ast = zend_ast_dynamic_add(zend_ast_create_dynamic(ZEND_AST_PARAMS), expr_ast);
        call_ast = zend_ast_create_binary(ZEND_AST_CALL, name_ast, params_ast);
 
        zend_compile_expr(result, call_ast TSRMLS_CC);
index 94fa29727be9d688dcfbab296910c381a57ecab1..1b6433ddff5c4c40c6dd1e005df4939a200ec5d2 100644 (file)
@@ -584,10 +584,9 @@ function_call_parameter_list:
 
 non_empty_function_call_parameter_list:
                function_call_parameter
-                       { $$.u.ast = zend_ast_create_dynamic(ZEND_AST_PARAMS);
-                         zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); }
+                       { $$.u.ast = zend_ast_create_dynamic_and_add(ZEND_AST_PARAMS, $1.u.ast); }
        |       non_empty_function_call_parameter_list ',' function_call_parameter
-                       { zend_ast_dynamic_add(&$1.u.ast, $3.u.ast); $$.u.ast = $1.u.ast; }
+                       { $$.u.ast = zend_ast_dynamic_add($1.u.ast, $3.u.ast); }
 ;
 
 function_call_parameter:
@@ -1070,10 +1069,16 @@ possible_comma:
 ;
 
 non_empty_static_array_pair_list:
-               non_empty_static_array_pair_list ',' static_scalar_value T_DOUBLE_ARROW static_scalar_value { zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); zend_ast_dynamic_add(&$$.u.ast, $5.u.ast); }
-       |       non_empty_static_array_pair_list ',' static_scalar_value { zend_ast_dynamic_add(&$$.u.ast, NULL); zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); }
-       |       static_scalar_value T_DOUBLE_ARROW static_scalar_value { $$.u.ast = zend_ast_create_dynamic(ZEND_INIT_ARRAY); zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); }
-       |       static_scalar_value { $$.u.ast = zend_ast_create_dynamic(ZEND_INIT_ARRAY); zend_ast_dynamic_add(&$$.u.ast, NULL); zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); }
+               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); }
+       |       static_scalar_value
+                       { $$.u.ast = zend_ast_dynamic_add(zend_ast_create_dynamic_and_add(
+                             ZEND_INIT_ARRAY, NULL), $1.u.ast); }
 ;
 
 expr:
@@ -1166,10 +1171,9 @@ member_name:
 
 assignment_list:
                assignment_list ',' assignment_list_element
-                       { zend_ast_dynamic_add(&$1.u.ast, $3.u.ast); $$.u.ast = $1.u.ast; }
+                       { $$.u.ast = zend_ast_dynamic_add($1.u.ast, $3.u.ast); }
        |       assignment_list_element
-                       { $$.u.ast = zend_ast_create_dynamic(ZEND_AST_LIST);
-                         zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); }
+                       { $$.u.ast = zend_ast_create_dynamic_and_add(ZEND_AST_LIST, $1.u.ast); }
 ;
 
 assignment_list_element:
@@ -1186,10 +1190,9 @@ array_pair_list:
 
 non_empty_array_pair_list:
                non_empty_array_pair_list ',' array_pair
-                       { zend_ast_dynamic_add(&$1.u.ast, $3.u.ast); $$.u.ast = $1.u.ast; }
+                       { $$.u.ast = zend_ast_dynamic_add($1.u.ast, $3.u.ast); }
        |       array_pair
-                       { $$.u.ast = zend_ast_create_dynamic(ZEND_AST_ARRAY);
-                         zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); }
+                       { $$.u.ast = zend_ast_create_dynamic_and_add(ZEND_AST_ARRAY, $1.u.ast); }
 ;
 
 array_pair: