Use std::atomic for Ast.viral_state_flags and Ast_Ident.entity

This commit is contained in:
gingerBill
2026-02-02 10:46:57 +00:00
parent f45ca2d03e
commit 2608f92fee
3 changed files with 14 additions and 14 deletions

View File

@@ -534,12 +534,12 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan
return false;
}
if (ident.entity->kind != Entity_Procedure) {
if (ident.entity.load()->kind != Entity_Procedure) {
gbString e = expr_to_string(handler_node);
ERROR_BLOCK();
error(handler.expr, "'%.*s' expected a direct reference to a procedure", LIT(builtin_name));
if(ident.entity->kind == Entity_Variable) {
if(ident.entity.load()->kind == Entity_Variable) {
error_line("\tSuggestion: Variables referencing a procedure are not allowed, they are not a direct procedure reference.");
} else {
error_line("\tSuggestion: Ensure '%s' is not a runtime-evaluated expression.", e); // NOTE(harold): Is this case possible to hit?

View File

@@ -2419,7 +2419,7 @@ gb_internal lbValue lb_handle_objc_block(lbProcedure *p, Ast *expr) {
Ast *proc_lit = unparen_expr(ce->args[capture_arg_count]);
if (proc_lit->kind == Ast_Ident) {
proc_lit = proc_lit->Ident.entity->decl_info->proc_lit;
proc_lit = proc_lit->Ident.entity.load()->decl_info->proc_lit;
}
GB_ASSERT(proc_lit->kind == Ast_ProcLit);

View File

@@ -425,7 +425,7 @@ struct AstSplitArgs {
#define AST_KINDS \
AST_KIND(Ident, "identifier", struct { \
Token token; \
Entity *entity; \
std::atomic<Entity *> entity; \
u32 hash; \
}) \
AST_KIND(Implicit, "implicit", Token) \
@@ -856,19 +856,19 @@ gb_global isize const ast_variant_sizes[] = {
};
struct AstCommonStuff {
AstKind kind; // u16
u8 state_flags;
u8 viral_state_flags;
i32 file_id;
TypeAndValue tav; // NOTE(bill): Making this a pointer is slower
AstKind kind; // u16
u8 state_flags;
std::atomic<u8> viral_state_flags;
i32 file_id;
TypeAndValue tav; // NOTE(bill): Making this a pointer is slower
};
struct Ast {
AstKind kind; // u16
u8 state_flags;
u8 viral_state_flags;
i32 file_id;
TypeAndValue tav; // NOTE(bill): Making this a pointer is slower
AstKind kind; // u16
u8 state_flags;
std::atomic<u8> viral_state_flags;
i32 file_id;
TypeAndValue tav; // NOTE(bill): Making this a pointer is slower
// IMPORTANT NOTE(bill): This must be at the end since the AST is allocated to be size of the variant
union {