parser: shorten side-effects on current_type

* src/parse-gram.y (tag.opt): Don't change current_type.
Rather, return its value.
Adjust dependencies.
This commit is contained in:
Akim Demaille
2018-11-29 12:20:36 +01:00
parent 6220e96e76
commit b7577ea6f6

View File

@@ -191,7 +191,7 @@
%printer { fputs (quotearg_style (c_quoting_style, $$), yyo); } STRING %printer { fputs (quotearg_style (c_quoting_style, $$), yyo); } STRING
%printer { fprintf (yyo, "{\n%s\n}", $$); } <char*> %printer { fprintf (yyo, "{\n%s\n}", $$); } <char*>
%type <uniqstr> BRACKETED_ID ID ID_COLON PERCENT_FLAG TAG tag variable %type <uniqstr> BRACKETED_ID ID ID_COLON PERCENT_FLAG TAG tag tag.opt variable
%printer { fputs ($$, yyo); } <uniqstr> %printer { fputs ($$, yyo); } <uniqstr>
%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID %printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
%printer { fprintf (yyo, "%s:", $$); } ID_COLON %printer { fprintf (yyo, "%s:", $$); } ID_COLON
@@ -425,16 +425,15 @@ symbol_declaration:
; ;
precedence_declaration: precedence_declaration:
precedence_declarator tag.opt symbols.prec precedence_declarator tag.opt symbols.prec[syms]
{ {
++current_prec; ++current_prec;
for (symbol_list *list = $3; list; list = list->next) for (symbol_list *list = $syms; list; list = list->next)
{ {
symbol_type_set (list->content.sym, current_type, @2); symbol_type_set (list->content.sym, $[tag.opt], @[tag.opt]);
symbol_precedence_set (list->content.sym, current_prec, $1, @1); symbol_precedence_set (list->content.sym, current_prec, $1, @1);
} }
symbol_list_free ($3); symbol_list_free ($syms);
current_type = NULL;
} }
; ;
@@ -446,8 +445,8 @@ precedence_declarator:
; ;
tag.opt: tag.opt:
%empty { current_type = NULL; } %empty { $$ = NULL; }
| TAG { current_type = $1; tag_seen = true; } | TAG { $$ = $1; tag_seen = true; }
; ;
/* Just like symbols.1 but accept INT for the sake of POSIX. */ /* Just like symbols.1 but accept INT for the sake of POSIX. */
@@ -481,8 +480,8 @@ symbols.1:
; ;
generic_symlist: generic_symlist:
generic_symlist_item { $$ = $1; } generic_symlist_item
| generic_symlist generic_symlist_item { $$ = symbol_list_append ($1, $2); } | generic_symlist generic_symlist_item { $$ = symbol_list_append ($1, $2); }
; ;
generic_symlist_item: generic_symlist_item:
@@ -586,7 +585,7 @@ rhs:
| rhs symbol named_ref.opt | rhs symbol named_ref.opt
{ grammar_current_rule_symbol_append ($2, @2, $3); } { grammar_current_rule_symbol_append ($2, @2, $3); }
| rhs tag.opt "{...}"[act] named_ref.opt[name] | rhs tag.opt "{...}"[act] named_ref.opt[name]
{ grammar_current_rule_action_append ($act, @act, $name, current_type); } { grammar_current_rule_action_append ($act, @act, $name, $[tag.opt]); }
| rhs "%?{...}" | rhs "%?{...}"
{ grammar_current_rule_predicate_append ($2, @2); } { grammar_current_rule_predicate_append ($2, @2); }
| rhs "%empty" | rhs "%empty"