X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=parser.c;h=a084e2f05ca32130bdc6b70808cb7562225e7f88;hb=6daf47fc5b29404dac619d6b16579c7bf59e8f6a;hp=24be6ec1dfe1a5a1c6a4e308d171d2393484582b;hpb=d5e01ba90494dc25f2b8ad5fb4c44cfb3f8a815b;p=xonotic%2Fgmqcc.git diff --git a/parser.c b/parser.c index 24be6ec..a084e2f 100644 --- a/parser.c +++ b/parser.c @@ -1888,6 +1888,18 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) (void)!parser_t_locals_add(parser, vx); (void)!parser_t_locals_add(parser, vy); (void)!parser_t_locals_add(parser, vz); + if (!ast_block_locals_add(localblock, var) || + !ast_block_collect(localblock, vx.var) || + !ast_block_collect(localblock, vy.var) || + !ast_block_collect(localblock, vz.var)) + { + parser_pop_local(parser); + parser_pop_local(parser); + parser_pop_local(parser); + parser_pop_local(parser); + ast_value_delete(var); + return false; + } } } else @@ -1898,12 +1910,12 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) ast_value_delete(var); return false; } - } - if (localblock && !ast_block_locals_add(localblock, var)) - { - parser_pop_local(parser); - ast_value_delete(var); - return false; + if (localblock && !ast_block_locals_add(localblock, var)) + { + parser_pop_local(parser); + ast_value_delete(var); + return false; + } } if (!parser_next(parser)) { @@ -2222,13 +2234,14 @@ bool parser_compile(const char *filename) else if (!parser->errors) parseerror(parser, "parse error\n"); lex_close(parser->lex); - mem_d(parser); + parser->lex = NULL; return false; } } } lex_close(parser->lex); + parser->lex = NULL; return !parser->errors; }