aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-02-04 22:45:13 +0000
committergingerBill <bill@gingerbill.org>2022-02-04 22:45:13 +0000
commitd5384c5aa4d823fbd527fb82e9eb5559b4266dfd (patch)
tree8886c71e94e1ceebef74b88aa7a4b3fa3f1ec601 /src
parent3a81f2ab898d537bba51b9ea81e047652112574e (diff)
Only check idents in the alias (of alias)+ problem
Diffstat (limited to 'src')
-rw-r--r--src/check_decl.cpp2
-rw-r--r--src/check_expr.cpp4
-rw-r--r--src/checker.cpp2
3 files changed, 4 insertions, 4 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp
index 2454feb33..63fc777c0 100644
--- a/src/check_decl.cpp
+++ b/src/check_decl.cpp
@@ -385,7 +385,7 @@ void check_const_decl(CheckerContext *ctx, Entity *e, Ast *type_expr, Ast *init,
Operand operand = {};
if (init != nullptr) {
- Entity *entity = check_entity_from_ident_or_selector(ctx, init);
+ Entity *entity = check_entity_from_ident_or_selector(ctx, init, false);
if (entity != nullptr && entity->kind == Entity_TypeName) {
// @TypeAliasingProblem
// NOTE(bill, 2022-02-03): This is used to solve the problem caused by type aliases
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index e1c9bde84..d51444b4d 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -4082,11 +4082,11 @@ bool is_entity_declared_for_selector(Entity *entity, Scope *import_scope, bool *
}
// NOTE(bill, 2022-02-03): see `check_const_decl` for why it exists reasoning
-Entity *check_entity_from_ident_or_selector(CheckerContext *c, Ast *node) {
+Entity *check_entity_from_ident_or_selector(CheckerContext *c, Ast *node, bool ident_only) {
if (node->kind == Ast_Ident) {
String name = node->Ident.token.string;
return scope_lookup(c->scope, name);
- } else if (node->kind == Ast_SelectorExpr) {
+ } else if (!ident_only) if (node->kind == Ast_SelectorExpr) {
ast_node(se, SelectorExpr, node);
if (se->token.kind == Token_ArrowRight) {
return nullptr;
diff --git a/src/checker.cpp b/src/checker.cpp
index c90f357dd..188d68502 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -3670,7 +3670,7 @@ bool correct_single_type_alias(CheckerContext *c, Entity *e) {
DeclInfo *d = e->decl_info;
if (d != nullptr && d->init_expr != nullptr) {
Ast *init = d->init_expr;
- Entity *alias_of = check_entity_from_ident_or_selector(c, init);
+ Entity *alias_of = check_entity_from_ident_or_selector(c, init, true);
if (alias_of != nullptr && alias_of->kind == Entity_TypeName) {
e->kind = Entity_TypeName;
return true;