summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-26 00:07:40 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-26 00:07:40 +0000
commit10889700d1e587c2ff5544efeb7f98448a365057 (patch)
tree8829a3e520869525cf0803a70209e58169abb94b /src
parentb568f67d75553bbecd2cadc4d61b330b8aea2ad2 (diff)
Error added for #125
Diffstat (limited to 'src')
-rw-r--r--src/parser/parser_decl.c7
-rw-r--r--src/parser/parser_struct.c6
2 files changed, 13 insertions, 0 deletions
diff --git a/src/parser/parser_decl.c b/src/parser/parser_decl.c
index c5df863..48077e1 100644
--- a/src/parser/parser_decl.c
+++ b/src/parser/parser_decl.c
@@ -56,6 +56,13 @@ ASTNode *parse_function(ParserContext *ctx, Lexer *l, int is_async)
strcat(buf, ",");
}
strcat(buf, s);
+
+ // Check for shadowing
+ if (is_known_generic(ctx, s))
+ {
+ zpanic_at(gt, "Generic parameter '%s' shadows an existing generic parameter", s);
+ }
+
free(s);
if (lexer_peek(l).type == TOK_COMMA)
diff --git a/src/parser/parser_struct.c b/src/parser/parser_struct.c
index 17d8e93..b7dec32 100644
--- a/src/parser/parser_struct.c
+++ b/src/parser/parser_struct.c
@@ -142,6 +142,12 @@ ASTNode *parse_trait(ParserContext *ctx, Lexer *l)
n_node->trait.methods = methods;
n_node->trait.generic_params = generic_params;
n_node->trait.generic_param_count = generic_count;
+
+ if (generic_count > 0)
+ {
+ ctx->known_generics_count -= generic_count;
+ }
+
register_trait(name);
return n_node;
}