aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/expr.zc
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-15 02:37:04 +0330
committerGravatar zinc <zinc@downsta.ir> 2026-10-15 02:40:51 +0330
commitb02bdd043673419357eadd6c646b9a77c62e5792 (patch)
tree629a8b700ecf64f19d70d2a6b00aa3eb79ade004 /src/compiler/expr.zc
parentdestructors: nothing moves out of a value with a drop: pop on an array with a... (diff)
destructors: hint: x: has drop and is live at spawn; the worker's copy drops it too, on x.spawn() of a mailbox struct for each live owned local with a drop; spec 6.15.4, lsp hint check
Diffstat (limited to 'src/compiler/expr.zc')
-rw-r--r--src/compiler/expr.zc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/expr.zc b/src/compiler/expr.zc
index 7687394..1cd765b 100644
--- a/src/compiler/expr.zc
+++ b/src/compiler/expr.zc
@@ -1199,6 +1199,7 @@ word field(int c) {
st = xty;
if (rt.eq_w(n, "drop") && (is_op(s_lp) || is_op(s_eq)) && (isptr(st) || st == tword) && !(isptr(st) && st[4][0] == TY_STRUCT && tfindfield(st[4], n) >= 0)) return drop_member(c, borrowed);
if (rt.eq_w(n, "send") && is_op(s_lp) && isptr(st) && st[4][0] == TY_STRUCT && tfindfield(st[4], intern("__mailbox")) >= 0) send_check = 1;
+ if (rt.eq_w(n, "spawn") && is_op(s_lp) && isptr(st) && st[4][0] == TY_STRUCT && tfindfield(st[4], intern("__mailbox")) >= 0) spawn_hint();
if (st[0] == TY_ARR || st[0] == TY_DYN) {
if (pmatch) probe_member(st);
if (is_op(s_lp) && array_method(n)) { xaf = borrowed; return array_member(c, n); }