]> granicus.if.org Git - php/commitdiff
Don't distinguish between ast/list in parser
authorNikita Popov <nikic@php.net>
Fri, 29 Aug 2014 18:52:26 +0000 (20:52 +0200)
committerNikita Popov <nikic@php.net>
Fri, 29 Aug 2014 19:02:10 +0000 (21:02 +0200)
This removes the need to use $<ast>{n} or $<list>$ casts in the
reduction actions.

Keeping the distinction in the parser doesn't really give us any
benefit and only makes changing the grammar harder.

Zend/zend_ast.c
Zend/zend_ast.h
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_language_parser.y

index 25320182741e5552648d058e22a99a1d68b206e4..1a8be00395803cabefe425329b0fc5b02783955f 100644 (file)
@@ -130,9 +130,11 @@ ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...) {
        return ast;
 }
 
-ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) {
+ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) {
        TSRMLS_FETCH();
-       zend_ast_list *list = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
+       zend_ast *ast = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
+
+       zend_ast_list *list = (zend_ast_list *) ast;
        list->kind = kind;
        list->attr = 0;
        list->lineno = CG(zend_lineno);
@@ -143,26 +145,27 @@ ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_ki
                uint32_t i;
                va_start(va, kind);
                for (i = 0; i < init_children; ++i) {
-                       list = zend_ast_list_add(list, va_arg(va, zend_ast *));
+                       ast = zend_ast_list_add(ast, va_arg(va, zend_ast *));
                }
                va_end(va);
        }
 
-       return list;
+       return ast;
 }
 
 static inline zend_bool is_power_of_two(uint32_t n) {
        return n == (n & -n);
 }
 
-ZEND_API zend_ast_list *zend_ast_list_add(zend_ast_list *list, zend_ast *op) {
+ZEND_API zend_ast *zend_ast_list_add(zend_ast *ast, zend_ast *op) {
+       zend_ast_list *list = zend_ast_get_list(ast);
        if (list->children >= 4 && is_power_of_two(list->children)) {
                TSRMLS_FETCH();
                list = zend_ast_realloc(list,
                        zend_ast_list_size(list->children), zend_ast_list_size(list->children * 2) TSRMLS_CC);
        }
        list->child[list->children++] = op;
-       return list;
+       return (zend_ast *) list;
 }
 
 static void zend_ast_add_array_element(zval *result, zval *offset, zval *expr TSRMLS_DC)
index 24d2aa6308856b542ec653b1007263fcf32adad4..2a1582ca24a21020a6f13e805e33ece2d23e2198 100644 (file)
@@ -195,8 +195,8 @@ ZEND_API zend_ast *zend_ast_create_decl(
        zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2
 );
 
-ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
-ZEND_API zend_ast_list *zend_ast_list_add(zend_ast_list *list, zend_ast *op);
+ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
+ZEND_API zend_ast *zend_ast_list_add(zend_ast *list, zend_ast *op);
 
 ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *scope TSRMLS_DC);
 
index 92b26b200108077d1a94ad19302064c68b0638d8..244c15433826d88a9081ae0e26be0d7b29936a9c 100644 (file)
@@ -3091,7 +3091,7 @@ zend_ast *zend_ast_append_str(zend_ast *left_ast, zend_ast *right_ast) /* {{{ */
 /* }}} */
 
 /* A hacky way that is used to store the doc comment for properties */
-zend_ast_list *zend_ast_append_doc_comment(zend_ast_list *list TSRMLS_DC) /* {{{ */
+zend_ast *zend_ast_append_doc_comment(zend_ast *list TSRMLS_DC) /* {{{ */
 {
        if (CG(doc_comment)) {
                list = zend_ast_list_add(list, zend_ast_create_zval_from_str(CG(doc_comment)));
@@ -5267,8 +5267,9 @@ void zend_compile_try(zend_ast *ast TSRMLS_DC) /* {{{ */
 /* }}} */
 
 /* Encoding declarations must already be handled during parsing */
-void zend_handle_encoding_declaration(zend_ast_list *declares TSRMLS_DC) /* {{{ */
+void zend_handle_encoding_declaration(zend_ast *ast TSRMLS_DC) /* {{{ */
 {
+       zend_ast_list *declares = zend_ast_get_list(ast);
        uint32_t i;
        for (i = 0; i < declares->children; ++i) {
                zend_ast *declare_ast = declares->child[i];
@@ -7166,7 +7167,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);
-       args_ast = (zend_ast *) zend_ast_create_list(1, ZEND_AST_ARG_LIST, expr_ast);
+       args_ast = zend_ast_create_list(1, ZEND_AST_ARG_LIST, expr_ast);
        call_ast = zend_ast_create(ZEND_AST_CALL, name_ast, args_ast);
 
        zend_compile_expr(result, call_ast TSRMLS_CC);
index 4fe18b9166cdb03177d4cd579930bbd2088bbcb7..b8e8ae108333f354554de432819ea659ae96c5e6 100644 (file)
@@ -89,7 +89,6 @@ static inline znode *zend_ast_get_znode(zend_ast *ast) {
 
 typedef union _zend_parser_stack_elem {
        zend_ast *ast;
-       zend_ast_list *list;
        zend_string *str;
        zend_ulong num;
 } zend_parser_stack_elem;
@@ -447,8 +446,8 @@ void zend_stop_lexing(TSRMLS_D);
 void zend_emit_final_return(zval *zv TSRMLS_DC);
 zend_ast *zend_ast_append_str(zend_ast *left, zend_ast *right);
 uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag);
-zend_ast_list *zend_ast_append_doc_comment(zend_ast_list *list TSRMLS_DC);
-void zend_handle_encoding_declaration(zend_ast_list *declares TSRMLS_DC);
+zend_ast *zend_ast_append_doc_comment(zend_ast *list TSRMLS_DC);
+void zend_handle_encoding_declaration(zend_ast *ast TSRMLS_DC);
 
 /* parser-driven code generators */
 void zend_do_free(znode *op1 TSRMLS_DC);
index d841e5e44f5e461c8e76d3a284cc456b255ebc1f..6bfef2219e2e88937a7d8e035876dfdd457d5825 100644 (file)
@@ -56,7 +56,6 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 }
 
 %destructor { zend_ast_destroy($$); } <ast>
-%destructor { zend_ast_destroy((zend_ast *) $$); } <list>
 %destructor { if ($$) zend_string_release($$); } <str>
 
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
@@ -238,16 +237,15 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 %type <ast> callable_expr callable_variable static_member new_variable
 %type <ast> assignment_list_element array_pair encaps_var encaps_var_offset isset_variables
 %type <ast> isset_variable
-
-%type <list> top_statement_list use_declarations const_list inner_statement_list if_stmt
-%type <list> alt_if_stmt for_exprs switch_case_list global_var_list static_var_list
-%type <list> echo_expr_list unset_variables catch_list parameter_list class_statement_list
-%type <list> implements_list interface_extends_list case_list if_stmt_without_else
-%type <list> non_empty_parameter_list argument_list non_empty_argument_list property_list
-%type <list> class_const_list name_list trait_adaptations method_body non_empty_for_exprs
-%type <list> ctor_arguments alt_if_stmt_without_else trait_adaptation_list lexical_vars
-%type <list> lexical_var_list encaps_list array_pair_list non_empty_array_pair_list
-%type <list> assignment_list
+%type <ast> top_statement_list use_declarations const_list inner_statement_list if_stmt
+%type <ast> alt_if_stmt for_exprs switch_case_list global_var_list static_var_list
+%type <ast> echo_expr_list unset_variables catch_list parameter_list class_statement_list
+%type <ast> implements_list interface_extends_list case_list if_stmt_without_else
+%type <ast> non_empty_parameter_list argument_list non_empty_argument_list property_list
+%type <ast> class_const_list name_list trait_adaptations method_body non_empty_for_exprs
+%type <ast> ctor_arguments alt_if_stmt_without_else trait_adaptation_list lexical_vars
+%type <ast> lexical_var_list encaps_list array_pair_list non_empty_array_pair_list
+%type <ast> assignment_list
 
 %type <num> returns_ref function is_reference is_variadic class_type variable_modifiers
 %type <num> method_modifiers trait_modifiers non_empty_member_modifiers member_modifier
@@ -257,7 +255,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 %% /* Rules */
 
 start:
-       top_statement_list      { CG(ast) = $<ast>1; }
+       top_statement_list      { CG(ast) = $1; }
 ;
 
 top_statement_list:
@@ -266,18 +264,14 @@ top_statement_list:
 ;
 
 namespace_name:
-               T_STRING { $$ = $1; }
-       |       namespace_name T_NS_SEPARATOR T_STRING
-                       { $$ = zend_ast_append_str($1, $3); }
+               T_STRING                                                                { $$ = $1; }
+       |       namespace_name T_NS_SEPARATOR T_STRING  { $$ = zend_ast_append_str($1, $3); }
 ;
 
 name:
-               namespace_name
-                       { $$ = $1; $$->attr = ZEND_NAME_NOT_FQ; }
-       |       T_NAMESPACE T_NS_SEPARATOR namespace_name
-                       { $$ = $3; $$->attr = ZEND_NAME_RELATIVE; }
-       |       T_NS_SEPARATOR namespace_name
-                       { $$ = $2; $$->attr = ZEND_NAME_FQ; }
+               namespace_name                                                          { $$ = $1; $$->attr = ZEND_NAME_NOT_FQ; }
+       |       T_NAMESPACE T_NS_SEPARATOR namespace_name       { $$ = $3; $$->attr = ZEND_NAME_RELATIVE; }
+       |       T_NS_SEPARATOR namespace_name                           { $$ = $2; $$->attr = ZEND_NAME_FQ; }
 ;
 
 top_statement:
@@ -293,17 +287,14 @@ top_statement:
                          RESET_DOC_COMMENT(); }
        |       T_NAMESPACE namespace_name { RESET_DOC_COMMENT(); }
                '{' top_statement_list '}'
-                       { $$ = zend_ast_create(ZEND_AST_NAMESPACE, $2, $<ast>5); }
+                       { $$ = zend_ast_create(ZEND_AST_NAMESPACE, $2, $5); }
        |       T_NAMESPACE { RESET_DOC_COMMENT(); }
                '{' top_statement_list '}'
-                       { $$ = zend_ast_create(ZEND_AST_NAMESPACE, NULL, $<ast>4); }
-       |       T_USE use_declarations ';'
-                       { $$ = $<ast>2; $$->attr = T_CLASS; }
-       |       T_USE T_FUNCTION use_declarations ';'
-                       { $$ = $<ast>3; $$->attr = T_FUNCTION; }
-       |       T_USE T_CONST use_declarations ';'
-                       { $$ = $<ast>3; $$->attr = T_CONST; }
-       |       T_CONST const_list ';'                  { $$ = $<ast>2; }
+                       { $$ = zend_ast_create(ZEND_AST_NAMESPACE, NULL, $4); }
+       |       T_USE use_declarations ';'                              { $$ = $2; $$->attr = T_CLASS; }
+       |       T_USE T_FUNCTION use_declarations ';'   { $$ = $3; $$->attr = T_FUNCTION; }
+       |       T_USE T_CONST use_declarations ';'              { $$ = $3; $$->attr = T_CONST; }
+       |       T_CONST const_list ';'                                  { $$ = $2; }
 ;
 
 use_declarations:
@@ -348,26 +339,26 @@ inner_statement:
 
 
 statement:
-               '{' inner_statement_list '}' { $$ = $<ast>2; }
-       |       if_stmt { $$ = $<ast>1; }
-       |       alt_if_stmt { $$ = $<ast>1; }
+               '{' inner_statement_list '}' { $$ = $2; }
+       |       if_stmt { $$ = $1; }
+       |       alt_if_stmt { $$ = $1; }
        |       T_WHILE '(' expr ')' while_statement
                        { $$ = zend_ast_create(ZEND_AST_WHILE, $3, $5); }
        |       T_DO statement T_WHILE '(' expr ')' ';'
                        { $$ = zend_ast_create(ZEND_AST_DO_WHILE, $2, $5); }
        |       T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement
-                       { $$ = zend_ast_create(ZEND_AST_FOR, $<ast>3, $<ast>5, $<ast>7, $9); }
+                       { $$ = zend_ast_create(ZEND_AST_FOR, $3, $5, $7, $9); }
        |       T_SWITCH '(' expr ')' switch_case_list
-                       { $$ = zend_ast_create(ZEND_AST_SWITCH, $3, $<ast>5); }
+                       { $$ = zend_ast_create(ZEND_AST_SWITCH, $3, $5); }
        |       T_BREAK optional_expr ';'               { $$ = zend_ast_create(ZEND_AST_BREAK, $2); }
        |       T_CONTINUE optional_expr ';'    { $$ = zend_ast_create(ZEND_AST_CONTINUE, $2); }
        |       T_RETURN optional_expr ';'              { $$ = zend_ast_create(ZEND_AST_RETURN, $2); }
-       |       T_GLOBAL global_var_list ';'    { $$ = $<ast>2; }
-       |       T_STATIC static_var_list ';'    { $$ = $<ast>2; }
-       |       T_ECHO echo_expr_list ';'               { $$ = $<ast>2; }
+       |       T_GLOBAL global_var_list ';'    { $$ = $2; }
+       |       T_STATIC static_var_list ';'    { $$ = $2; }
+       |       T_ECHO echo_expr_list ';'               { $$ = $2; }
        |       T_INLINE_HTML { $$ = zend_ast_create(ZEND_AST_ECHO, $1); }
        |       expr ';' { $$ = $1; }
-       |       T_UNSET '(' unset_variables ')' ';' { $$ = $<ast>3; }
+       |       T_UNSET '(' unset_variables ')' ';' { $$ = $3; }
        |       T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
                        { $$ = zend_ast_create(ZEND_AST_FOREACH, $3, $5, NULL, $7); }
        |       T_FOREACH '(' expr T_AS foreach_variable T_DOUBLE_ARROW foreach_variable ')'
@@ -376,10 +367,10 @@ statement:
        |       T_DECLARE '(' const_list ')'
                        { zend_handle_encoding_declaration($3 TSRMLS_CC); }
                declare_statement
-                       { $$ = zend_ast_create(ZEND_AST_DECLARE, $<ast>3, $6); }
+                       { $$ = zend_ast_create(ZEND_AST_DECLARE, $3, $6); }
        |       ';'     /* empty statement */ { $$ = NULL; }
        |       T_TRY '{' inner_statement_list '}' catch_list finally_statement
-                       { $$ = zend_ast_create(ZEND_AST_TRY, $<ast>3, $<ast>5, $6); }
+                       { $$ = zend_ast_create(ZEND_AST_TRY, $3, $5, $6); }
        |       T_THROW expr ';' { $$ = zend_ast_create(ZEND_AST_THROW, $2); }
        |       T_GOTO T_STRING ';' { $$ = zend_ast_create(ZEND_AST_GOTO, $2); }
        |       T_STRING ':' { $$ = zend_ast_create(ZEND_AST_LABEL, $1); }
@@ -389,12 +380,12 @@ catch_list:
                /* empty */
                        { $$ = zend_ast_create_list(0, ZEND_AST_CATCH_LIST); }
        |       catch_list T_CATCH '(' name T_VARIABLE ')' '{' inner_statement_list '}'
-                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_CATCH, $4, $5, $<ast>8)); }
+                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_CATCH, $4, $5, $8)); }
 ;
 
 finally_statement:
                /* empty */ { $$ = NULL; }
-       |       T_FINALLY '{' inner_statement_list '}' { $$ = $<ast>3; }
+       |       T_FINALLY '{' inner_statement_list '}' { $$ = $3; }
 ;
 
 unset_variables:
@@ -410,7 +401,7 @@ function_declaration_statement:
        function returns_ref T_STRING '(' parameter_list ')' backup_doc_comment
        '{' inner_statement_list '}'
                { $$ = zend_ast_create_decl(ZEND_AST_FUNC_DECL, $2, $1, $7,
-                     zend_ast_get_str($3), $<ast>5, NULL, $<ast>9); }
+                     zend_ast_get_str($3), $5, NULL, $9); }
 ;
 
 is_reference:
@@ -427,11 +418,11 @@ class_declaration_statement:
                class_type { $<num>$ = CG(zend_lineno); }
                T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}'
                        { $$ = zend_ast_create_decl(ZEND_AST_CLASS, $1, $<num>2, $6,
-                                 zend_ast_get_str($3), $4, $<ast>5, $<ast>8); }
+                                 zend_ast_get_str($3), $4, $5, $8); }
        |       T_INTERFACE { $<num>$ = CG(zend_lineno); }
                T_STRING interface_extends_list backup_doc_comment '{' class_statement_list '}'
                        { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2, $5,
-                                 zend_ast_get_str($3), NULL, $<ast>4, $<ast>7); }
+                                 zend_ast_get_str($3), NULL, $4, $7); }
 ;
 
 class_type:
@@ -459,22 +450,22 @@ implements_list:
 foreach_variable:
                variable                        { $$ = $1; }
        |       '&' variable            { $$ = zend_ast_create(ZEND_AST_REF, $2); }
-       |       T_LIST '(' assignment_list ')' { $$ = $<ast>3; }
+       |       T_LIST '(' assignment_list ')' { $$ = $3; }
 ;
 
 for_statement:
                statement { $$ = $1; }
-       |       ':' inner_statement_list T_ENDFOR ';' { $$ = $<ast>2; }
+       |       ':' inner_statement_list T_ENDFOR ';' { $$ = $2; }
 ;
 
 foreach_statement:
                statement { $$ = $1; }
-       |       ':' inner_statement_list T_ENDFOREACH ';' { $$ = $<ast>2; }
+       |       ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; }
 ;
 
 declare_statement:
                statement { $$ = $1; }
-       |       ':' inner_statement_list T_ENDDECLARE ';' { $$ = $<ast>2; }
+       |       ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; }
 ;
 
 switch_case_list:
@@ -487,9 +478,9 @@ switch_case_list:
 case_list:
                /* empty */ { $$ = zend_ast_create_list(0, ZEND_AST_SWITCH_LIST); }
        |       case_list T_CASE expr case_separator inner_statement_list
-                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_SWITCH_CASE, $3, $<ast>5)); }
+                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_SWITCH_CASE, $3, $5)); }
        |       case_list T_DEFAULT case_separator inner_statement_list
-                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_SWITCH_CASE, NULL, $<ast>4)); }
+                       { $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_SWITCH_CASE, NULL, $4)); }
 ;
 
 case_separator:
@@ -500,7 +491,7 @@ case_separator:
 
 while_statement:
                statement { $$ = $1; }
-       |       ':' inner_statement_list T_ENDWHILE ';' { $$ = $<ast>2; }
+       |       ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; }
 ;
 
 
@@ -522,17 +513,17 @@ if_stmt:
 alt_if_stmt_without_else:
                T_IF '(' expr ')' ':' inner_statement_list
                        { $$ = zend_ast_create_list(1, ZEND_AST_IF,
-                             zend_ast_create(ZEND_AST_IF_ELEM, $3, $<ast>6)); }
+                             zend_ast_create(ZEND_AST_IF_ELEM, $3, $6)); }
        |       alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list
                        { $$ = zend_ast_list_add($1,
-                             zend_ast_create(ZEND_AST_IF_ELEM, $4, $<ast>7)); }
+                             zend_ast_create(ZEND_AST_IF_ELEM, $4, $7)); }
 ;
 
 alt_if_stmt:
                alt_if_stmt_without_else T_ENDIF ';' { $$ = $1; }
        |       alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';'
                        { $$ = zend_ast_list_add($1,
-                             zend_ast_create(ZEND_AST_IF_ELEM, NULL, $<ast>4)); }
+                             zend_ast_create(ZEND_AST_IF_ELEM, NULL, $4)); }
 ;
 
 parameter_list:
@@ -612,15 +603,15 @@ class_statement_list:
 
 class_statement:
                variable_modifiers property_list ';'
-                       { $<list>$ = zend_ast_append_doc_comment($2 TSRMLS_CC); $$->attr = $1; }
+                       { $$ = zend_ast_append_doc_comment($2 TSRMLS_CC); $$->attr = $1; }
        |       T_CONST class_const_list ';'
-                       { $$ = $<ast>2; RESET_DOC_COMMENT(); }
+                       { $$ = $2; RESET_DOC_COMMENT(); }
        |       T_USE name_list trait_adaptations
                        { $$ = zend_ast_create(ZEND_AST_USE_TRAIT, $2, $3); }
        |       method_modifiers function returns_ref T_STRING '(' parameter_list ')' backup_doc_comment
                method_body
                        { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1, $2, $8,
-                                 zend_ast_get_str($4), $<ast>6, NULL, $<ast>9); }
+                                 zend_ast_get_str($4), $6, NULL, $9); }
 ;
 
 name_list:
@@ -648,7 +639,7 @@ trait_adaptation:
 
 trait_precedence:
        absolute_trait_method_reference T_INSTEADOF name_list
-               { $$ = zend_ast_create(ZEND_AST_TRAIT_PRECEDENCE, $1, $<ast>3); }
+               { $$ = zend_ast_create(ZEND_AST_TRAIT_PRECEDENCE, $1, $3); }
 ;
 
 trait_alias:
@@ -745,12 +736,12 @@ non_empty_for_exprs:
 
 new_expr:
                T_NEW class_name_reference ctor_arguments
-                       { $$ = zend_ast_create(ZEND_AST_NEW, $2, $<ast>3); }
+                       { $$ = zend_ast_create(ZEND_AST_NEW, $2, $3); }
 ;
 
 expr_without_variable:
                T_LIST '(' assignment_list ')' '=' expr
-                       { $$ = zend_ast_create(ZEND_AST_ASSIGN, $<ast>3, $6); }
+                       { $$ = zend_ast_create(ZEND_AST_ASSIGN, $3, $6); }
        |       variable '=' expr
                        { $$ = zend_ast_create(ZEND_AST_ASSIGN, $1, $3); }
        |       variable '=' '&' variable
@@ -837,39 +828,31 @@ expr_without_variable:
        |       expr '?' ':' expr
                        { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, NULL, $4); }
        |       internal_functions_in_yacc { $$ = $1; }
-       |       T_INT_CAST expr
-                       { $$ = zend_ast_create_cast(IS_LONG, $2); }
-       |       T_DOUBLE_CAST expr
-                       { $$ = zend_ast_create_cast(IS_DOUBLE, $2); }
-       |       T_STRING_CAST expr
-                       { $$ = zend_ast_create_cast(IS_STRING, $2); }
-       |       T_ARRAY_CAST expr
-                       { $$ = zend_ast_create_cast(IS_ARRAY, $2); }
-       |       T_OBJECT_CAST expr
-                       { $$ = zend_ast_create_cast(IS_OBJECT, $2); }
-       |       T_BOOL_CAST expr
-                       { $$ = zend_ast_create_cast(_IS_BOOL, $2); }
-       |       T_UNSET_CAST expr
-                       { $$ = zend_ast_create_cast(IS_NULL, $2); }
-       |       T_EXIT exit_expr { $$ = zend_ast_create(ZEND_AST_EXIT, $2); }
-       |       '@' expr { $$ = zend_ast_create(ZEND_AST_SILENCE, $2); }
+       |       T_INT_CAST expr         { $$ = zend_ast_create_cast(IS_LONG, $2); }
+       |       T_DOUBLE_CAST expr      { $$ = zend_ast_create_cast(IS_DOUBLE, $2); }
+       |       T_STRING_CAST expr      { $$ = zend_ast_create_cast(IS_STRING, $2); }
+       |       T_ARRAY_CAST expr       { $$ = zend_ast_create_cast(IS_ARRAY, $2); }
+       |       T_OBJECT_CAST expr      { $$ = zend_ast_create_cast(IS_OBJECT, $2); }
+       |       T_BOOL_CAST expr        { $$ = zend_ast_create_cast(_IS_BOOL, $2); }
+       |       T_UNSET_CAST expr       { $$ = zend_ast_create_cast(IS_NULL, $2); }
+       |       T_EXIT exit_expr        { $$ = zend_ast_create(ZEND_AST_EXIT, $2); }
+       |       '@' expr                        { $$ = zend_ast_create(ZEND_AST_SILENCE, $2); }
        |       scalar { $$ = $1; }
        |       '`' backticks_expr '`' { $$ = zend_ast_create(ZEND_AST_SHELL_EXEC, $2); }
        |       T_PRINT expr { $$ = zend_ast_create(ZEND_AST_PRINT, $2); }
        |       T_YIELD { $$ = zend_ast_create(ZEND_AST_YIELD, NULL, NULL); }
        |       T_YIELD expr { $$ = zend_ast_create(ZEND_AST_YIELD, $2, NULL); }
-       |       T_YIELD expr T_DOUBLE_ARROW expr
-                       { $$ = zend_ast_create(ZEND_AST_YIELD, $4, $2); }
+       |       T_YIELD expr T_DOUBLE_ARROW expr { $$ = zend_ast_create(ZEND_AST_YIELD, $4, $2); }
        |       function returns_ref '(' parameter_list ')' lexical_vars backup_doc_comment
                '{' inner_statement_list '}'
                        { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2, $1, $7,
                                  zend_string_init("{closure}", sizeof("{closure}") - 1, 0),
-                             $<ast>4, $<ast>6, $<ast>9); }
+                             $4, $6, $9); }
        |       T_STATIC function returns_ref '(' parameter_list ')' lexical_vars backup_doc_comment
                '{' inner_statement_list '}'
                        { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $3 | ZEND_ACC_STATIC, $2, $8,
                              zend_string_init("{closure}", sizeof("{closure}") - 1, 0),
-                             $<ast>5, $<ast>7, $<ast>10); }
+                             $5, $7, $10); }
 ;
 
 function:
@@ -902,15 +885,13 @@ lexical_var:
 
 function_call:
                name argument_list
-                       { $$ = zend_ast_create(ZEND_AST_CALL, $1, $<ast>2); }
+                       { $$ = zend_ast_create(ZEND_AST_CALL, $1, $2); }
        |       class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
-                       { $$ = zend_ast_create(ZEND_AST_STATIC_CALL,
-                             $1, $3, $<ast>4); }
+                       { $$ = zend_ast_create(ZEND_AST_STATIC_CALL, $1, $3, $4); }
        |       variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
-                       { $$ = zend_ast_create(ZEND_AST_STATIC_CALL,
-                             $1, $3, $<ast>4); }
+                       { $$ = zend_ast_create(ZEND_AST_STATIC_CALL, $1, $3, $4); }
        |       callable_expr argument_list
-                       { $$ = zend_ast_create(ZEND_AST_CALL, $1, $<ast>2); }
+                       { $$ = zend_ast_create(ZEND_AST_CALL, $1, $2); }
 ;
 
 class_name:
@@ -934,7 +915,7 @@ backticks_expr:
                /* empty */
                        { $$ = zend_ast_create_zval_from_str(STR_EMPTY_ALLOC()); }
        |       T_ENCAPSED_AND_WHITESPACE { $$ = $1; }
-       |       encaps_list { $$ = $<ast>1; }
+       |       encaps_list { $$ = $1; }
 ;
 
 
@@ -945,8 +926,8 @@ ctor_arguments:
 
 
 dereferencable_scalar:
-               T_ARRAY '(' array_pair_list ')' { $$ = $<ast>3; }
-       |       '[' array_pair_list ']'                 { $$ = $<ast>2; }
+               T_ARRAY '(' array_pair_list ')' { $$ = $3; }
+       |       '[' array_pair_list ']'                 { $$ = $2; }
        |       T_CONSTANT_ENCAPSED_STRING              { $$ = $1; }
 ;
 
@@ -964,8 +945,8 @@ scalar:
        |       T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; }
        |       T_START_HEREDOC T_END_HEREDOC
                        { $$ = zend_ast_create_zval_from_str(STR_EMPTY_ALLOC()); }
-       |       '"' encaps_list '"'     { $$ = $<ast>2; }
-       |       T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $<ast>2; }
+       |       '"' encaps_list '"'     { $$ = $2; }
+       |       T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; }
        |       dereferencable_scalar   { $$ = $1; }
        |       class_name_scalar       { $$ = $1; }
        |       constant                        { $$ = $1; }
@@ -1020,7 +1001,7 @@ callable_variable:
        |       dereferencable '{' expr '}'
                        { $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
        |       dereferencable T_OBJECT_OPERATOR member_name argument_list
-                       { $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1, $3, $<ast>4); }
+                       { $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1, $3, $4); }
        |       function_call { $$ = $1; }
 ;
 
@@ -1034,12 +1015,9 @@ variable:
 ;
 
 simple_variable:
-               T_VARIABLE
-                       { $$ = $1; }
-       |       '$' '{' expr '}'
-                       { $$ = $3; }
-       |       '$' simple_variable
-                       { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
+               T_VARIABLE                      { $$ = $1; }
+       |       '$' '{' expr '}'        { $$ = $3; }
+       |       '$' simple_variable     { $$ = zend_ast_create(ZEND_AST_VAR, $2); }
 ;
 
 static_member:
@@ -1079,7 +1057,7 @@ assignment_list:
 
 assignment_list_element:
                variable                                                { $$ = $1; }
-       |       T_LIST '(' assignment_list ')'  { $$ = $<ast>3; }
+       |       T_LIST '(' assignment_list ')'  { $$ = $3; }
        |       /* empty */                                             { $$ = NULL; }
 ;