From 78d04a8352f3eb60e3a2a97fe5bf881366cc2f79 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Sat, 18 Aug 2012 21:56:42 +0200 Subject: [PATCH] implement correct behaviour for shadows locals --- parser.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/parser.c b/parser.c index 567a622..fa91069 100644 --- a/parser.c +++ b/parser.c @@ -1842,20 +1842,20 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) { if (olddecl) { + ast_value_delete(var); if (isparam && parsewarning(parser, WARN_LOCAL_SHADOWS, "a parameter is shadowing local `%s`", parser_tokval(parser))) { - ast_value_delete(var); return false; } else if (!isparam) { - ast_value_delete(var); parseerror(parser, "local `%s` already declared here: %s:%i", parser_tokval(parser), ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); return false; } + goto nextvar; } } } @@ -2010,6 +2010,7 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) } } +nextvar: if (!parser_next(parser)) { ast_value_delete(var); return false; -- 2.39.2