mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-12 06:18:39 +00:00
Use std::atomic for Ast.viral_state_flags and Ast_Ident.entity
This commit is contained in:
@@ -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?
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user