Add #+feature global-context

This allows to use of `context` in the global scope on a per file basis.
This commit is contained in:
gingerBill
2025-08-10 15:03:30 +01:00
parent 1524b40bc9
commit 983f3ec423
2 changed files with 13 additions and 1 deletions
+7
View File
@@ -357,6 +357,9 @@ enum OptInFeatureFlags : u64 {
OptInFeatureFlag_IntegerDivisionByZero_Zero = 1u<<2, OptInFeatureFlag_IntegerDivisionByZero_Zero = 1u<<2,
OptInFeatureFlag_IntegerDivisionByZero_Self = 1u<<3, OptInFeatureFlag_IntegerDivisionByZero_Self = 1u<<3,
OptInFeatureFlag_GlobalContext = 1u<<4,
OptInFeatureFlag_IntegerDivisionByZero_ALL = OptInFeatureFlag_IntegerDivisionByZero_Trap|OptInFeatureFlag_IntegerDivisionByZero_Zero|OptInFeatureFlag_IntegerDivisionByZero_Self, OptInFeatureFlag_IntegerDivisionByZero_ALL = OptInFeatureFlag_IntegerDivisionByZero_Trap|OptInFeatureFlag_IntegerDivisionByZero_Zero|OptInFeatureFlag_IntegerDivisionByZero_Self,
}; };
@@ -374,6 +377,10 @@ u64 get_feature_flag_from_name(String const &name) {
if (name == "integer-division-by-zero:self") { if (name == "integer-division-by-zero:self") {
return OptInFeatureFlag_IntegerDivisionByZero_Self; return OptInFeatureFlag_IntegerDivisionByZero_Self;
} }
if (name == "global-context") {
return OptInFeatureFlag_GlobalContext;
}
return OptInFeatureFlag_NONE; return OptInFeatureFlag_NONE;
} }
+6 -1
View File
@@ -1855,7 +1855,12 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d,
auto prev_flags = c.scope->flags; auto prev_flags = c.scope->flags;
defer (c.scope->flags = prev_flags); defer (c.scope->flags = prev_flags);
c.scope->flags &= ~ScopeFlag_ContextDefined;
if (check_feature_flags(ctx, d->decl_node) & OptInFeatureFlag_GlobalContext) {
c.scope->flags |= ScopeFlag_ContextDefined;
} else {
c.scope->flags &= ~ScopeFlag_ContextDefined;
}
e->parent_proc_decl = c.curr_proc_decl; e->parent_proc_decl = c.curr_proc_decl;