From: Michael Tremer Date: Sat, 1 Jun 2019 04:21:27 +0000 (+0100) Subject: libpakfire: parser: Only merge into the top parser at the very end X-Git-Tag: 0.9.28~1285^2~1002 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5eb2b2b012e267f531e2833a23e57391978cb11;p=pakfire.git libpakfire: parser: Only merge into the top parser at the very end Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index f7022b904..fb4df0af7 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -82,7 +82,7 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op, %type word; %type words; -%type top; +%type grammar; %type item; %type statement; %type block; @@ -100,14 +100,22 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op, %% -top : top item +top : grammar { - $$ = merge_parsers($1, $2); + merge_parsers(parser, $1); + + pakfire_parser_unref($1); } - | item + ; + +grammar : grammar item { - $$ = merge_parsers(parser, $1); + $$ = merge_parsers($1, $2); + + //pakfire_parser_unref($1); + //pakfire_parser_unref($2); } + | item ; item : statement @@ -170,19 +178,19 @@ else : T_ELSE T_EOL; end : T_END T_EOL; -if_stmt : if variable T_EQUALS variable T_EOL top else top end +if_stmt : if variable T_EQUALS variable T_EOL grammar else grammar end { $$ = make_if_stmt(parser, OP_EQUALS, $2, $4, $6, $8); //pakfire_parser_unref($6); //pakfire_parser_unref($8); } - | if variable T_EQUALS variable T_EOL top end + | if variable T_EQUALS variable T_EOL grammar end { $$ = make_if_stmt(parser, OP_EQUALS, $2, $4, $6, NULL); //pakfire_parser_unref($6); }; -block : block_opening top block_closing +block : block_opening grammar block_closing { $$ = $2; };