@@ -57,7 +57,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
57
57
58
58
%destructor { zend_ast_destroy ($$); } <ast>
59
59
%destructor { zend_ast_destroy ((zend_ast *) $$); } <list>
60
- %destructor { if ($$) STR_RELEASE ($$); } <str>
60
+ %destructor { if ($$) zend_string_release ($$); } <str>
61
61
62
62
%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
63
63
%left ' ,'
@@ -254,6 +254,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
254
254
%type <num> returns_ref function is_reference is_variadic class_type variable_modifiers
255
255
%type <num> method_modifiers trait_modifiers non_empty_member_modifiers member_modifier
256
256
257
+ %type <str> backup_doc_comment
257
258
258
259
%% /* Rules */
259
260
@@ -411,10 +412,9 @@ unset_variable:
411
412
;
412
413
413
414
function_declaration_statement :
414
- function returns_ref T_STRING ' (' parameter_list ' )'
415
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
415
+ function returns_ref T_STRING ' (' parameter_list ' )' backup_doc_comment
416
416
' {' inner_statement_list ' }'
417
- { $$ = zend_ast_create_decl(ZEND_AST_FUNC_DECL, $2 , $1 , $<str> 7 ,
417
+ { $$ = zend_ast_create_decl(ZEND_AST_FUNC_DECL, $2 , $1 , $7 ,
418
418
zend_ast_get_str ($3 ), $<ast>5, NULL, $<ast>9); }
419
419
;
420
420
@@ -429,19 +429,13 @@ is_variadic:
429
429
;
430
430
431
431
class_declaration_statement :
432
- class_type
433
- { $<num>$ = CG(zend_lineno); }
434
- T_STRING extends_from implements_list
435
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
436
- ' {' class_statement_list ' }'
437
- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, $1 , $<num>2 , $<str>6 ,
432
+ class_type { $<num>$ = CG(zend_lineno); }
433
+ T_STRING extends_from implements_list backup_doc_comment ' {' class_statement_list ' }'
434
+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, $1 , $<num>2 , $6 ,
438
435
zend_ast_get_str ($3 ), $4, $<ast>5, $<ast>8); }
439
- | T_INTERFACE
440
- { $<num>$ = CG(zend_lineno); }
441
- T_STRING interface_extends_list
442
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
443
- ' {' class_statement_list ' }'
444
- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $<str>5 ,
436
+ | T_INTERFACE { $<num>$ = CG(zend_lineno); }
437
+ T_STRING interface_extends_list backup_doc_comment ' {' class_statement_list ' }'
438
+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $5 ,
445
439
zend_ast_get_str ($3 ), NULL, $<ast>4, $<ast>7); }
446
440
;
447
441
@@ -630,10 +624,9 @@ class_statement:
630
624
{ $$ = $<ast>2 ; RESET_DOC_COMMENT(); }
631
625
| T_USE name_list trait_adaptations
632
626
{ $$ = zend_ast_create(ZEND_AST_USE_TRAIT, $2 , $3 ); }
633
- | method_modifiers function returns_ref T_STRING ' (' parameter_list ' )'
634
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
627
+ | method_modifiers function returns_ref T_STRING ' (' parameter_list ' )' backup_doc_comment
635
628
method_body
636
- { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1 , $2 , $<str> 8 ,
629
+ { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1 , $2 , $8 ,
637
630
zend_ast_get_str ($4 ), $<ast>6, NULL, $<ast>9); }
638
631
;
639
632
@@ -876,24 +869,26 @@ expr_without_variable:
876
869
| T_YIELD expr { $$ = zend_ast_create(ZEND_AST_YIELD, $2 , NULL ); }
877
870
| T_YIELD expr T_DOUBLE_ARROW expr
878
871
{ $$ = zend_ast_create(ZEND_AST_YIELD, $4 , $2 ); }
879
- | function returns_ref ' (' parameter_list ' )' lexical_vars
880
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
872
+ | function returns_ref ' (' parameter_list ' )' lexical_vars backup_doc_comment
881
873
' {' inner_statement_list ' }'
882
- { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2 , $1 , $<str> 7 ,
874
+ { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2 , $1 , $7 ,
883
875
zend_string_init (" {closure}" , sizeof (" {closure}" ) - 1, 0),
884
876
$<ast>4, $<ast>6, $<ast>9); }
885
- | T_STATIC function returns_ref ' (' parameter_list ' )' lexical_vars
886
- { $<str>$ = CG(doc_comment); CG(doc_comment) = NULL ; }
877
+ | T_STATIC function returns_ref ' (' parameter_list ' )' lexical_vars backup_doc_comment
887
878
' {' inner_statement_list ' }'
888
- { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $3 | ZEND_ACC_STATIC, $2 ,
889
- $<str> 8 , zend_string_init(" {closure}" , sizeof (" {closure}" ) - 1 , 0 ),
879
+ { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $3 | ZEND_ACC_STATIC, $2 , $8 ,
880
+ zend_string_init (" {closure}" , sizeof (" {closure}" ) - 1, 0),
890
881
$<ast>5, $<ast>7, $<ast>10); }
891
882
;
892
883
893
884
function :
894
885
T_FUNCTION { $$ = CG(zend_lineno); }
895
886
;
896
887
888
+ backup_doc_comment :
889
+ /* empty */ { $$ = CG(doc_comment); CG(doc_comment) = NULL ; }
890
+ ;
891
+
897
892
returns_ref :
898
893
/* empty */ { $$ = 0 ; }
899
894
| ' &' { $$ = ZEND_ACC_RETURN_REFERENCE; }
0 commit comments