]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
warn about double function declarations...
authorWolfgang (Blub) Bumiller <blub@speed.at>
Fri, 23 Nov 2012 21:22:22 +0000 (22:22 +0100)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Fri, 23 Nov 2012 21:22:22 +0000 (22:22 +0100)
opts.def
parser.c

index 1596048fee6fc21270d632d29f26969eb55a973e..0741115a5101a0289b78158f699028b1ab25030b 100644 (file)
--- 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 */
index 48227f567d4f34f6c875479f51c8ca4cc01756c1..7d91aaaf7e1a79ca3720df812f2f1f29627160b3 100644 (file)
--- 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");