From: Michael Tremer Date: Mon, 1 Mar 2021 17:39:17 +0000 (+0000) Subject: parser: Fix reference counting X-Git-Tag: 0.9.28~1285^2~672 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09b214b746ab85360c1c9f034ed21dc94e298715;p=pakfire.git parser: Fix reference counting Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index 1274b0751..b627d6f35 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -161,43 +161,48 @@ grammar : %empty ABORT; if (!*result) - *result = $$; + *result = pakfire_parser_ref($$); } | grammar declaration { + $$ = $1; + int r = pakfire_parser_apply_declaration($1, $2); if (r) ABORT; - $$ = pakfire_parser_ref($1); + pakfire_parser_free_declaration($2); } | grammar subparser { + $$ = $1; + int r = pakfire_parser_merge($1, $2); if (r) ABORT; - $$ = pakfire_parser_ref($1); + pakfire_parser_unref($2); } | grammar if_stmt { + $$ = $1; + if ($2) { int r = pakfire_parser_merge($1, $2); + pakfire_parser_unref($2); if (r) ABORT; } - - $$ = pakfire_parser_ref($1); } | grammar empty { - $$ = pakfire_parser_ref($1); + $$ = $1; } ; subgrammar : T_INDENT grammar T_OUTDENT { - $$ = pakfire_parser_ref($2); + $$ = $2; } ; @@ -266,7 +271,7 @@ subparser : subparser_name T_EOL subgrammar T_END T_EOL { pakfire_parser_set_namespace($3, $1); - $$ = pakfire_parser_ref($3); + $$ = $3; } | subparser_name T_EOL { @@ -303,12 +308,15 @@ subparser_name : T_SUBPARSER if_stmt : T_IF T_STRING T_EQUALS T_STRING T_EOL subgrammar else_stmt T_END T_EOL { $$ = make_if_stmt(pakfire, result, OP_EQUALS, $2, $4, $6, $7); + + pakfire_parser_unref($6); + pakfire_parser_unref($7); } ; else_stmt : T_ELSE T_EOL subgrammar { - $$ = pakfire_parser_ref($3); + $$ = $3; } | %empty {