From: Wolfgang (Blub) Bumiller Date: Fri, 23 Nov 2012 21:22:22 +0000 (+0100) Subject: warn about double function declarations... X-Git-Tag: 0.1.9~295 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=39b8b6a660b265e8a6a4bdfa63a96798f26c1d06;p=xonotic%2Fgmqcc.git warn about double function declarations... --- diff --git a/opts.def b/opts.def index 1596048..0741115 100644 --- a/opts.def +++ b/opts.def @@ -58,6 +58,7 @@ GMQCC_DEFINE_FLAG(ASSIGN_FUNCTION_TYPES) GMQCC_DEFINE_FLAG(PREPROCESSOR) GMQCC_DEFINE_FLAG(MULTIFILE_IF) + GMQCC_DEFINE_FLAG(DOUBLE_DECLARATION) #endif /* some cleanup so we don't have to */ diff --git a/parser.c b/parser.c index 48227f5..7d91aaa 100644 --- a/parser.c +++ b/parser.c @@ -3587,14 +3587,23 @@ skipvar: break; } - func = ast_function_new(ast_ctx(var), var->name, var); - if (!func) { - parseerror(parser, "failed to allocate function for `%s`", var->name); - break; + if (var->isconst) { + (void)!parsewarning(parser, WARN_DOUBLE_DECLARATION, + "builtin `%s` has already been defined\n" + " -> previous declaration here: %s:%i", + var->name, ast_ctx(var).file, (int)ast_ctx(var).line); } - vec_push(parser->functions, func); + else + { + func = ast_function_new(ast_ctx(var), var->name, var); + if (!func) { + parseerror(parser, "failed to allocate function for `%s`", var->name); + break; + } + vec_push(parser->functions, func); - func->builtin = -parser_token(parser)->constval.i; + func->builtin = -parser_token(parser)->constval.i; + } if (!parser_next(parser)) { parseerror(parser, "expected comma or semicolon");