diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-08-10 15:03:30 +0100 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2025-08-10 15:03:30 +0100 |
| commit | 983f3ec423a6a424c0e64ed2a5de41edffc459ec (patch) | |
| tree | 4ac641bb1b7f9d36564b27020c4f392e6c1e5f27 /src | |
| parent | 1524b40bc949765faa185644356a7c7caffac98c (diff) | |
Add `#+feature global-context`
This allows to use of `context` in the global scope on a per file basis.
Diffstat (limited to 'src')
| -rw-r--r-- | src/build_settings.cpp | 7 | ||||
| -rw-r--r-- | src/check_decl.cpp | 7 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp index a6dce5233..fad4bedaa 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -357,6 +357,9 @@ enum OptInFeatureFlags : u64 { OptInFeatureFlag_IntegerDivisionByZero_Zero = 1u<<2, OptInFeatureFlag_IntegerDivisionByZero_Self = 1u<<3, + OptInFeatureFlag_GlobalContext = 1u<<4, + + 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") { return OptInFeatureFlag_IntegerDivisionByZero_Self; } + + if (name == "global-context") { + return OptInFeatureFlag_GlobalContext; + } return OptInFeatureFlag_NONE; } diff --git a/src/check_decl.cpp b/src/check_decl.cpp index ee7906e5e..b2522f24a 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1855,7 +1855,12 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, auto prev_flags = c.scope->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; |