mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-12 14:23:33 +00:00
Make Entity.parent_proc_decl atomic
This commit is contained in:
@@ -170,7 +170,7 @@ struct Entity {
|
||||
Type * type;
|
||||
std::atomic<Ast *> identifier; // Can be nullptr
|
||||
DeclInfo * decl_info;
|
||||
DeclInfo * parent_proc_decl; // nullptr if in file/global scope
|
||||
std::atomic<DeclInfo *> parent_proc_decl; // nullptr if in file/global scope
|
||||
AstFile * file;
|
||||
AstPackage *pkg;
|
||||
|
||||
@@ -370,7 +370,7 @@ gb_internal Entity *alloc_entity_using_variable(Entity *parent, Token token, Typ
|
||||
token.pos = parent->token.pos;
|
||||
Entity *entity = alloc_entity(Entity_Variable, parent->scope, token, type);
|
||||
entity->using_parent = parent;
|
||||
entity->parent_proc_decl = parent->parent_proc_decl;
|
||||
entity->parent_proc_decl.store(parent->parent_proc_decl, std::memory_order_relaxed);
|
||||
entity->using_expr = using_expr;
|
||||
entity->flags |= EntityFlag_Using;
|
||||
entity->flags |= EntityFlag_Used;
|
||||
|
||||
@@ -2215,8 +2215,10 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
|
||||
Entity *e = entity_of_node(ident);
|
||||
GB_ASSERT(e != nullptr);
|
||||
|
||||
if (e->parent_proc_decl != nullptr && e->parent_proc_decl->entity != nullptr) {
|
||||
procedure = e->parent_proc_decl->entity.load()->token.string;
|
||||
DeclInfo *parent_proc_decl = e->parent_proc_decl.load(std::memory_order_relaxed);
|
||||
if (parent_proc_decl != nullptr &&
|
||||
parent_proc_decl->entity != nullptr) {
|
||||
procedure = parent_proc_decl->entity.load()->token.string;
|
||||
} else {
|
||||
procedure = str_lit("");
|
||||
}
|
||||
|
||||
@@ -559,8 +559,8 @@ gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) {
|
||||
// no prefix
|
||||
return;
|
||||
}
|
||||
if (e->parent_proc_decl) {
|
||||
Entity *p = e->parent_proc_decl->entity;
|
||||
if (e->parent_proc_decl.load(std::memory_order_relaxed)) {
|
||||
Entity *p = e->parent_proc_decl.load(std::memory_order_relaxed)->entity;
|
||||
write_canonical_parent_prefix(w, p);
|
||||
type_writer_append(w, p->token.string.text, p->token.string.len);
|
||||
if (is_type_polymorphic(p->type)) {
|
||||
|
||||
Reference in New Issue
Block a user