aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2026-03-13 14:07:29 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2026-03-13 14:09:53 +0200
commited7da0d9e31e8dd6847e2e603f0d1943330cf4d0 (patch)
tree16e4785bd92f43a37bed6b0028b0f239faa00d51 /src/analyze.c
parent25b8db28cf87708808744b97774c2a8427e129e2 (diff)
downloadfwd-ed7da0d9e31e8dd6847e2e603f0d1943330cf4d0.tar.gz
fwd-ed7da0d9e31e8dd6847e2e603f0d1943330cf4d0.zip
add initial reference invalidation
+ Makes vec example actually memory safe, which is cool + Specify owner > sub relationships with ">" in closure parameter lists, uses the same group idea as closure calls + Relies on users implementing functions in a consistent manner, since you can kind of do whatever with pointers. Presumably there would be a stdlib of vec/map/set etc. which applications could then use and by proxy be memory safe. Although some more checks wouldn't hurt, I suppose? + Not sure I like having reference invalidation be 'just a move', seems to work alright but the semantics of it are a bit muddy.
Diffstat (limited to 'src/analyze.c')
-rw-r--r--src/analyze.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/analyze.c b/src/analyze.c
index c05542a..fc94e15 100644
--- a/src/analyze.c
+++ b/src/analyze.c
@@ -252,7 +252,12 @@ static int deduce_closure_types(struct scope *scope, struct ast *node, struct ty
return -1;
}
+ /* use same loop to deduce ownership rules */
for (; param && t; param = param->n, t = t->n) {
+ /* if this param owns the next, reflect that in our variables */
+ if (t->or)
+ param->or = param->n;
+
if (var_type(param))
continue;