From e35a26a9e18ebbc93e209e3d4b1654965ccda810 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Tue, 14 Aug 2012 13:50:55 +0200 Subject: [PATCH] the error about an already-declared variable should display the place its been previously declared at --- parser.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/parser.c b/parser.c index aad3b6a..6327d58 100644 --- a/parser.c +++ b/parser.c @@ -1387,6 +1387,7 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) lex_ctx ctx; ast_value *var; varentry_t varent; + ast_expression *olddecl; int basetype = parser_token(parser)->constval.t; @@ -1410,15 +1411,17 @@ static bool parser_variable(parser_t *parser, ast_block *localblock) return false; } - if (!localblock && parser_find_global(parser, parser_tokval(parser))) { + if (!localblock && (olddecl = parser_find_global(parser, parser_tokval(parser)))) { ast_value_delete(var); - parseerror(parser, "global already exists: %s\n", parser_tokval(parser)); + parseerror(parser, "global %s already declared here: %s:%i\n", + parser_tokval(parser), ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); return false; } if (localblock && parser_find_local(parser, parser_tokval(parser), parser->blocklocal)) { ast_value_delete(var); - parseerror(parser, "local variable already exists: %s\n", parser_tokval(parser)); + parseerror(parser, "local %s already declared here: %s:%i\n", + parser_tokval(parser), ast_ctx(olddecl).file, (int)ast_ctx(olddecl).line); return false; } -- 2.39.2