aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-05-13 23:29:06 +0100
committergingerBill <bill@gingerbill.org>2020-05-13 23:29:06 +0100
commit7c42d4ba75b0d063ae6d9ebb704068f3ebe16847 (patch)
tree5c0243edfbba78aa673cfbceab78aead02ffc690 /src/checker.cpp
parent14ce6d8ed8864f9283c55fdd0d9a9cc2039470b4 (diff)
(#594) Add `#config` to replace `#defined`; Restrict `#defined` within procedure bodies to remove race condition
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index a35f07b0b..992aeb9b3 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -703,6 +703,14 @@ void init_universal(void) {
intrinsics_pkg->scope->flags |= ScopeFlag_Pkg | ScopeFlag_Global;
intrinsics_pkg->scope->pkg = intrinsics_pkg;
+ config_pkg = gb_alloc_item(a, AstPackage);
+ config_pkg->name = str_lit("config");
+ config_pkg->kind = Package_Normal;
+
+ config_pkg->scope = create_scope(nullptr, a);
+ config_pkg->scope->flags |= ScopeFlag_Pkg | ScopeFlag_Global;
+ config_pkg->scope->pkg = config_pkg;
+
// Types
for (isize i = 0; i < gb_count_of(basic_types); i++) {
@@ -783,7 +791,7 @@ void init_universal(void) {
Entity *entity = alloc_entity_constant(nullptr, make_token_ident(name), type, value);
entity->state = EntityState_Resolved;
- if (scope_insert(builtin_pkg->scope, entity)) {
+ if (scope_insert(config_pkg->scope, entity)) {
error(entity->token, "'%s' defined as an argument is already declared at the global scope", name);
defined_values_double_declaration = true;
// NOTE(bill): Just exit early before anything, even though the compiler will do that anyway