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;
}
;
{
pakfire_parser_set_namespace($3, $1);
- $$ = pakfire_parser_ref($3);
+ $$ = $3;
}
| subparser_name T_EOL
{
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
{