From d8397304ba277bbf0e3780c46400f9abca6adc47 Mon Sep 17 00:00:00 2001 From: Himbeer Date: Tue, 8 Oct 2024 13:23:00 +0200 Subject: Check for import name collisions --- src/check.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/check.c b/src/check.c index f6a8576..10ba2bf 100644 --- a/src/check.c +++ b/src/check.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "lex.h" #include "parse.h" #include "util.h" @@ -22,10 +23,30 @@ error(struct location loc, const char *fmt, ...) exit(EXIT_CHECK); } +static void +check_import(struct ast_import *imports, int i) +{ + for (int j = 0; j < i; ++j) { + if (j == i) { + continue; + } + + if (!strcmp(imports[j].name, imports[i].name)) { + error(imports[i].loc, + "import collision (previous import at %s:%d:%d)", + imports[j].loc.file, + imports[j].loc.line, + imports[j].loc.column); + } + } +} + static void check_imports(struct ast_import *imports, int n) { - /* TODO */ + for (int i = 0; i < n; ++i) { + check_import(imports, i); + } } static void -- cgit v1.2.3