From e87fd30c4878abd9a81b2f142a9b40bcc187ada0 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Fri, 9 Nov 2012 19:38:57 +0100 Subject: [PATCH] Enable 'local-already-declared' check for locals even when they are functions - this was previously simply in the wrong 'if' --- parser.c | 86 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/parser.c b/parser.c index 72fa486..6fd83ca 100644 --- a/parser.c +++ b/parser.c @@ -2510,61 +2510,61 @@ static bool parse_variable(parser_t *parser, ast_block *localblock) goto cleanup; } } - else /* if it's a local: */ + } + if (localblock) /* if it's a local: */ + { + olddecl = parser_find_local(parser, var->name, parser->blocklocal, &isparam); + if (opts_standard == COMPILER_GMQCC) { - olddecl = parser_find_local(parser, var->name, parser->blocklocal, &isparam); - if (opts_standard == COMPILER_GMQCC) + if (olddecl) { - if (olddecl) - { - if (!isparam) { - parseerror(parser, "local `%s` already declared here: %s:%i", - var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); - retval = false; - goto cleanup; - } + if (!isparam) { + parseerror(parser, "local `%s` already declared here: %s:%i", + var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); + retval = false; + goto cleanup; } + } - if( (!isparam && olddecl) || - (olddecl = parser_find_local(parser, var->name, 0, &isparam)) - ) + if( (!isparam && olddecl) || + (olddecl = parser_find_local(parser, var->name, 0, &isparam)) + ) + { + if (parsewarning(parser, WARN_LOCAL_SHADOWS, + "local `%s` is shadowing a parameter", var->name)) { - if (parsewarning(parser, WARN_LOCAL_SHADOWS, - "local `%s` is shadowing a parameter", var->name)) - { - parseerror(parser, "local `%s` already declared here: %s:%i", - var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); - retval = false; - goto cleanup; - } + parseerror(parser, "local `%s` already declared here: %s:%i", + var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); + retval = false; + goto cleanup; } } - else + } + else + { + if (olddecl) { - if (olddecl) + if (isparam && + parsewarning(parser, WARN_LOCAL_SHADOWS, + "a parameter is shadowing local `%s`", var->name)) { - if (isparam && - parsewarning(parser, WARN_LOCAL_SHADOWS, - "a parameter is shadowing local `%s`", var->name)) - { - ast_value_delete(var); - var = NULL; - retval = false; - goto cleanup; - } - else if (!isparam) - { - parseerror(parser, "local `%s` already declared here: %s:%i", - var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); - ast_value_delete(var); - var = NULL; - retval = false; - goto cleanup; - } ast_value_delete(var); var = NULL; - goto nextvar; + retval = false; + goto cleanup; + } + else if (!isparam) + { + parseerror(parser, "local `%s` already declared here: %s:%i", + var->name, ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); + ast_value_delete(var); + var = NULL; + retval = false; + goto cleanup; } + ast_value_delete(var); + var = NULL; + goto nextvar; } } } -- 2.39.2