mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Fix aliasing of overloaded procedures from other scopes
This commit is contained in:
+5
-6
@@ -159,8 +159,7 @@ Allocator :: struct #ordered {
|
|||||||
|
|
||||||
|
|
||||||
Context :: struct #ordered {
|
Context :: struct #ordered {
|
||||||
thread_guid: int;
|
thread_id: int;
|
||||||
thread_index: int;
|
|
||||||
|
|
||||||
allocator: Allocator;
|
allocator: Allocator;
|
||||||
|
|
||||||
@@ -256,8 +255,8 @@ __init_context_from_ptr :: proc(c: ^Context, other: ^Context) #cc_contextless {
|
|||||||
if c.allocator.procedure == nil {
|
if c.allocator.procedure == nil {
|
||||||
c.allocator = default_allocator();
|
c.allocator = default_allocator();
|
||||||
}
|
}
|
||||||
if c.thread_guid == 0 {
|
if c.thread_id == 0 {
|
||||||
c.thread_guid = os.current_thread_id();
|
c.thread_id = os.current_thread_id();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,8 +266,8 @@ __init_context :: proc(c: ^Context) #cc_contextless {
|
|||||||
if c.allocator.procedure == nil {
|
if c.allocator.procedure == nil {
|
||||||
c.allocator = default_allocator();
|
c.allocator = default_allocator();
|
||||||
}
|
}
|
||||||
if c.thread_guid == 0 {
|
if c.thread_id == 0 {
|
||||||
c.thread_guid = os.current_thread_id();
|
c.thread_id = os.current_thread_id();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4081,6 +4081,13 @@ Entity *check_selector(Checker *c, Operand *operand, AstNode *node, Type *type_h
|
|||||||
String op_name = op_expr->Ident.token.string;
|
String op_name = op_expr->Ident.token.string;
|
||||||
Entity *e = scope_lookup_entity(c->context.scope, op_name);
|
Entity *e = scope_lookup_entity(c->context.scope, op_name);
|
||||||
|
|
||||||
|
bool is_alias = false;
|
||||||
|
while (e->kind == Entity_Alias) {
|
||||||
|
GB_ASSERT(e->Alias.base != nullptr);
|
||||||
|
e = e->Alias.base;
|
||||||
|
is_alias = true;
|
||||||
|
}
|
||||||
|
|
||||||
add_entity_use(c, op_expr, e);
|
add_entity_use(c, op_expr, e);
|
||||||
expr_entity = e;
|
expr_entity = e;
|
||||||
|
|
||||||
@@ -4111,9 +4118,24 @@ Entity *check_selector(Checker *c, Operand *operand, AstNode *node, Type *type_h
|
|||||||
operand->expr = node;
|
operand->expr = node;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool is_alias = false;
|
||||||
|
while (entity->kind == Entity_Alias) {
|
||||||
|
GB_ASSERT(e->Alias.base != nullptr);
|
||||||
|
entity = entity->Alias.base;
|
||||||
|
is_alias = true;
|
||||||
|
}
|
||||||
|
|
||||||
check_entity_decl(c, entity, nullptr, nullptr);
|
check_entity_decl(c, entity, nullptr, nullptr);
|
||||||
GB_ASSERT(entity->type != nullptr);
|
GB_ASSERT(entity->type != nullptr);
|
||||||
|
|
||||||
|
if (is_alias) {
|
||||||
|
// TODO(bill): Which scope do you search for for an alias?
|
||||||
|
// import_scope = entity->scope;
|
||||||
|
entity_name = entity->token.string;
|
||||||
|
}
|
||||||
|
|
||||||
isize overload_count = entity_overload_count(import_scope, entity_name);
|
isize overload_count = entity_overload_count(import_scope, entity_name);
|
||||||
bool is_overloaded = overload_count > 1;
|
bool is_overloaded = overload_count > 1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user