aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/build_settings.cpp7
-rw-r--r--src/check_decl.cpp7
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;