diff options
| author | 2026-10-15 17:03:03 +0330 | |
|---|---|---|
| committer | 2026-10-15 17:03:03 +0330 | |
| commit | 7cb983bbea98d2038b2a8015a6d1f1afd40991c9 (patch) | |
| tree | ec3d88a15801207fc6d8d3c6d142617ffec85460 /tests/hold/reject | |
| parent | merge work/borrow: borrow returns before definition, borrows clause, borrow m... (diff) | |
| parent | bench: rss probe path fix (diff) | |
merge work/actors: wasm seed bootstrap (seed/MANIFEST), shared copy-on-write actor memory, top-level hold blocks on all backends and lsp
Diffstat (limited to 'tests/hold/reject')
| -rw-r--r-- | tests/hold/reject/actor_handler.zc | 8 | ||||
| -rw-r--r-- | tests/hold/reject/closure.zc | 5 | ||||
| -rw-r--r-- | tests/hold/reject/nested.zc | 5 | ||||
| -rw-r--r-- | tests/hold/reject/o3.zc | 5 | ||||
| -rw-r--r-- | tests/hold/reject/order.zc | 7 | ||||
| -rw-r--r-- | tests/hold/reject/outside.zc | 5 | ||||
| -rw-r--r-- | tests/hold/reject/pointer.zc | 5 |
7 files changed, 40 insertions, 0 deletions
diff --git a/tests/hold/reject/actor_handler.zc b/tests/hold/reject/actor_handler.zc new file mode 100644 index 0000000..5548cad --- /dev/null +++ b/tests/hold/reject/actor_handler.zc @@ -0,0 +1,8 @@ +// error: total: is shared in a hold block; only the functions written inside that block can use it +// shared state reached from an actor's handler without going through its hold block +namespace; +include rt, actor; +typecheck on; +hold { shared let total; fn add(int n) { total = total + n; return total; } } +int work(int n) { total = total + n; return n; } +fn main() { actor.Actor<int,int>* a = rt.new(actor.Actor<int,int>); a.spawn(work); a.send(1); a.close(); return 0; } diff --git a/tests/hold/reject/closure.zc b/tests/hold/reject/closure.zc new file mode 100644 index 0000000..5c082d2 --- /dev/null +++ b/tests/hold/reject/closure.zc @@ -0,0 +1,5 @@ +// error: c: is shared; a closure can't use it +namespace; +include rt; +hold { shared let c; fn a() { let f = fn() { return c; }; return f(); } } +fn main() { return a(); } diff --git a/tests/hold/reject/nested.zc b/tests/hold/reject/nested.zc new file mode 100644 index 0000000..b8d38a6 --- /dev/null +++ b/tests/hold/reject/nested.zc @@ -0,0 +1,5 @@ +// error: hold blocks don't nest +namespace; +include rt; +hold { shared let c; hold { shared let d; } } +fn main() { return 0; } diff --git a/tests/hold/reject/o3.zc b/tests/hold/reject/o3.zc new file mode 100644 index 0000000..87c2dd5 --- /dev/null +++ b/tests/hold/reject/o3.zc @@ -0,0 +1,5 @@ +// error: f: is in a hold block and can't be o3 +namespace; +include rt; +hold { shared let c; o3 int f(int k) { return k; } } +fn main() { return f(1); } diff --git a/tests/hold/reject/order.zc b/tests/hold/reject/order.zc new file mode 100644 index 0000000..9a2943b --- /dev/null +++ b/tests/hold/reject/order.zc @@ -0,0 +1,7 @@ +// trap: was entered while +// blocks are entered in declaration order; going back to an earlier block while a later one is held stops the program +namespace; +include rt; +hold { shared let a; fn ga() { a++; return a; } } +hold { shared let b; fn gb() { b++; return ga(); } } +fn main() { rt.put_n(gb()); rt.put_c(10); return 0; } diff --git a/tests/hold/reject/outside.zc b/tests/hold/reject/outside.zc new file mode 100644 index 0000000..a202898 --- /dev/null +++ b/tests/hold/reject/outside.zc @@ -0,0 +1,5 @@ +// error: c: is shared in a hold block; only the functions written inside that block can use it +namespace; +include rt; +hold { shared let c; fn a() { c++; return c; } } +fn main() { c = 3; return a(); } diff --git a/tests/hold/reject/pointer.zc b/tests/hold/reject/pointer.zc new file mode 100644 index 0000000..6306a62 --- /dev/null +++ b/tests/hold/reject/pointer.zc @@ -0,0 +1,5 @@ +// error: name: is shared, so it holds numbers +namespace; +include rt; +hold { shared char* name = "x"; fn a() { return 0; } } +fn main() { return a(); } |
