From 5ffa0dda8e1a9bb30ecc267fd7b7c33b5b1f56cd Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Thu, 19 Jul 2012 20:30:36 +0200 Subject: [PATCH] Keep track of blocklocal in parser_parse_block --- parser.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/parser.c b/parser.c index 6fdb87d..31f2939 100644 --- a/parser.c +++ b/parser.c @@ -173,11 +173,15 @@ bool parser_body_do(parser_t *parser, ast_block *block) ast_block* parser_parse_block(parser_t *parser) { - ast_block *block; + size_t oldblocklocal; + ast_block *block = NULL; + + oldblocklocal = parser->blocklocal; + parser->blocklocal = parser->locals_count; if (!parser_next(parser)) { /* skip the '{' */ parseerror(parser, "expected function body"); - return NULL; + goto cleanup; } block = ast_block_new(parser_ctx(parser)); @@ -189,9 +193,13 @@ ast_block* parser_parse_block(parser_t *parser) if (!parser_body_do(parser, block)) { ast_block_delete(block); - return NULL; + block = NULL; + goto cleanup; } } + +cleanup: + parser->blocklocal = oldblocklocal; return block; } -- 2.39.2