aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-08-10 12:47:15 +0100
committerGitHub <noreply@github.com>2025-08-10 12:47:15 +0100
commita0ff05e63307f533b384820717bb582e1ff47c39 (patch)
treed9adfd28090dc72044003fed211383a63bdb3587 /src/checker.cpp
parentdbc338248e8693994f232d02f1aff9536f204add (diff)
parent14ca1c8c89dd219dd52d061649d4db7778df2e64 (diff)
Merge pull request #5558 from odin-lang/bill/init-fini-changes
`@(init)` & `@(finit)` Changes.
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index a13290750..f631a1412 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -2675,6 +2675,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st
is_init = false;
}
+ if (t->Proc.calling_convention != ProcCC_Contextless) {
+ error(e->token, "@(init) procedures must be declared as \"contextless\"");
+ }
+
if ((e->scope->flags & (ScopeFlag_File|ScopeFlag_Pkg)) == 0) {
error(e->token, "@(init) procedures must be declared at the file scope");
is_init = false;
@@ -2689,6 +2693,7 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st
error(e->token, "An @(init) procedure must not use a blank identifier as its name");
}
+
if (is_init) {
add_dependency_to_set(c, e);
array_add(&c->info.init_procedures, e);
@@ -2706,6 +2711,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st
is_fini = false;
}
+ if (t->Proc.calling_convention != ProcCC_Contextless) {
+ error(e->token, "@(fini) procedures must be declared as \"contextless\"");
+ }
+
if ((e->scope->flags & (ScopeFlag_File|ScopeFlag_Pkg)) == 0) {
error(e->token, "@(fini) procedures must be declared at the file scope");
is_fini = false;