]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: parser: Drop reference of parent when creating a child parser
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Jun 2019 02:27:11 +0000 (03:27 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Jun 2019 02:27:11 +0000 (03:27 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/parser/grammar.y

index 633c4b703241fdd0730860d6ef931190f5ef28fc..b428236b3e6646a05c5d8c8b5a7cfe2095e018a7 100644 (file)
@@ -59,6 +59,8 @@ enum operator {
 static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op,
        const char* val1, const char* val2, PakfireParser if_block, PakfireParser else_block);
 
+static PakfireParser make_child(PakfireParser parent, const char* namespace);
+
 %}
 
 %token                                                 T_APPEND
@@ -158,7 +160,7 @@ text                                                : text line
 if                                                     : T_IF
                                                        {
                                                                // Open a new block
-                                                               parser = pakfire_parser_create_child(parser, NULL);
+                                                               parser = make_child(parser, NULL);
                                                        };
 
 else                                           : T_ELSE T_EOL
@@ -167,7 +169,7 @@ else                                                : T_ELSE T_EOL
                                                                parser = pakfire_parser_get_parent(parser);
 
                                                                // Open a new else block
-                                                               parser = pakfire_parser_create_child(parser, NULL);
+                                                               parser = make_child(parser, NULL);
                                                        };
 
 end                                                    : T_END T_EOL;
@@ -212,7 +214,7 @@ block                                               : block_opening grammar end
 block_opening                          : variable T_EOL
                                                        {
                                                                // Create a new sub-parser which opens a new namespace
-                                                               parser = pakfire_parser_create_child(parser, $1);
+                                                               parser = make_child(parser, $1);
                                                        };
 
 statement                                      : variable T_ASSIGN value T_EOL
@@ -332,3 +334,10 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op,
 
        return result;
 }
+
+static PakfireParser make_child(PakfireParser parent, const char* namespace) {
+       PakfireParser parser = pakfire_parser_create_child(parent, namespace);
+       pakfire_parser_unref(parent);
+
+       return parser;
+}