From ed7da0d9e31e8dd6847e2e603f0d1943330cf4d0 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Fri, 13 Mar 2026 14:07:29 +0200 Subject: 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. --- src/analyze.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/analyze.c') 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; -- cgit v1.2.3