]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: parser: Tidy up top grammar
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Jun 2019 02:45:20 +0000 (03:45 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Jun 2019 02:45:20 +0000 (03:45 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/parser/grammar.y

index f076ed6383ea3b954d593faf92e092994cc2b2f3..8245b900ca2b85231fb48e3e08fae0709bc50a18 100644 (file)
@@ -83,6 +83,7 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op,
 %type <string>                                 words;
 
 %type <parser>                                 top;
+%type <parser>                                 item;
 %type <parser>                                 assignment;
 %type <parser>                                 block;
 %type <parser>                                 block_assignments;
@@ -101,24 +102,22 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op,
 
 %%
 
-top                                                    : %empty
-                                                       {
-                                                               $$ = new_parser(parser, NULL);
-                                                       }
-                                                       | top assignment
-                                                       {
-                                                               $$ = merge_parsers($1, $2);
-                                                       }
-                                                       | top block
+top                                                    : top item
                                                        {
                                                                $$ = merge_parsers($1, $2);
                                                        }
-                                                       | top empty
+                                                       | item
                                                        {
-                                                               $$ = $1;
+                                                               $$ = merge_parsers(parser, $1);
                                                        }
                                                        ;
 
+item                                           : assignment
+                                                       | block
+                                                       | empty {
+                                                               $$ = NULL;
+                                                       };
+
 empty                                          : T_EOL
                                                        ;
 
@@ -318,10 +317,14 @@ static PakfireParser new_parser(PakfireParser parent, const char* namespace) {
 }
 
 static PakfireParser merge_parsers(PakfireParser p1, PakfireParser p2) {
-       PakfireParser p = pakfire_parser_merge(p1, p2);
-
-       // Parser 2 is now obsolete
-       pakfire_parser_unref(p2);
+       PakfireParser p = NULL;
+
+       if (p1 && p2)
+               p = pakfire_parser_merge(p1, p2);
+       else if (p1)
+               p = p1;
+       else if (p2)
+               p = p2;
 
        return p;
 }