aboutsummaryrefslogtreecommitdiff
path: root/examples/learn
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-14 10:47:30 +0000
committerGravatar zinc <zinc@downsta.ir> 2026-10-14 10:47:30 +0000
commit4a22cf28742bf33577678de494aa09ab60a3c820 (patch)
treed9133c7ab431fd3f41ef7713a869d23be4539244 /examples/learn
parentMerge four small fixes: std hovers, capture terminator, bare static calls, vo... (diff)
parentzc: add the defer statement (diff)
Merge the defer statement; todo: tick it, add its follow-ups
Diffstat (limited to 'examples/learn')
-rw-r--r--examples/learn/34-defer.out4
-rw-r--r--examples/learn/34-defer.zc20
2 files changed, 24 insertions, 0 deletions
diff --git a/examples/learn/34-defer.out b/examples/learn/34-defer.out
new file mode 100644
index 0000000..284c915
--- /dev/null
+++ b/examples/learn/34-defer.out
@@ -0,0 +1,4 @@
+0 1 100 0 0
+1
+4 1 100 0 2
+6 100 7 3
diff --git a/examples/learn/34-defer.zc b/examples/learn/34-defer.zc
new file mode 100644
index 0000000..10e46e1
--- /dev/null
+++ b/examples/learn/34-defer.zc
@@ -0,0 +1,20 @@
+namespace;
+include rt;
+fn say(n) { rt.put_n(n); rt.put_c(32); return 0; }
+int work(int n) {
+ int* p = rt.new(int);
+ defer rt.free(p);
+ defer say(100);
+ *p = n * 2;
+ say(*p);
+ if (n > 2) return *p + 1;
+ say(1);
+ return 0;
+}
+fn main() {
+ for (let i = 0; i < 4; i++) {
+ defer { say(i); rt.put_c(10); }
+ if (i == 1) continue;
+ say(work(i));
+ }
+}