aboutsummaryrefslogtreecommitdiff
path: root/src/check_decl.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-02-15 11:31:51 +0000
committergingerBill <bill@gingerbill.org>2023-02-15 11:31:51 +0000
commit94c1331c071d4816bec44345393dfd07f75c97dc (patch)
treefa049dc71063ad5d743a766a8108d0daf2a28fb1 /src/check_decl.cpp
parent48685e8bf15dada1734ad6463fafb7d00c86b2b0 (diff)
Implement `@(fini)` (opposite of `@(init)`)
Diffstat (limited to 'src/check_decl.cpp')
-rw-r--r--src/check_decl.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp
index f0059424e..63e6514e0 100644
--- a/src/check_decl.cpp
+++ b/src/check_decl.cpp
@@ -816,9 +816,14 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) {
if (ac.test) {
e->flags |= EntityFlag_Test;
}
- if (ac.init) {
+ if (ac.init && ac.fini) {
+ error(e->token, "A procedure cannot be both declared as @(init) and @(fini)");
+ } else if (ac.init) {
e->flags |= EntityFlag_Init;
+ } else if (ac.fini) {
+ e->flags |= EntityFlag_Fini;
}
+
if (ac.set_cold) {
e->flags |= EntityFlag_Cold;
}