aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-08-12 18:55:46 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-08-12 19:06:03 +0300
commit2157fdbaca0b80e488c4f77ad5c0d04b051175cf (patch)
tree6a6ba7be30b2eb32219cd9aa2eb30c3bddacd5b4 /tests
parentce6ba9e8d260e43d11518688363229755a212472 (diff)
downloadek-2157fdbaca0b80e488c4f77ad5c0d04b051175cf.tar.gz
ek-2157fdbaca0b80e488c4f77ad5c0d04b051175cf.zip
make defer work better with generic code
Diffstat (limited to 'tests')
-rw-r--r--tests/defer.ek23
-rw-r--r--tests/defer_shadow.ek28
-rw-r--r--tests/generic_defer.ek17
3 files changed, 68 insertions, 0 deletions
diff --git a/tests/defer.ek b/tests/defer.ek
new file mode 100644
index 0000000..839cc4d
--- /dev/null
+++ b/tests/defer.ek
@@ -0,0 +1,23 @@
+typedef i27 {};
+typedef i9 {};
+typedef bool {};
+
+extern _putchar(i9 c);
+
+main()
+{
+ defer _putchar('S');
+ for i9 i = 0 as i9; i < 10 as i9; i = i + 1 as i9 {
+ defer _putchar('0' + i);
+
+ if i == 5 as i9 { continue; }
+ if i == 9 as i9 { defer _putchar('b'); break; }
+ }
+
+ {
+ defer _putchar('g');
+ goto end;
+ }
+
+ end:
+}
diff --git a/tests/defer_shadow.ek b/tests/defer_shadow.ek
new file mode 100644
index 0000000..0e890a2
--- /dev/null
+++ b/tests/defer_shadow.ek
@@ -0,0 +1,28 @@
+typedef i9 {}
+typedef i27 {}
+
+define any[] {}
+
+extern _putchar(i9 c);
+
+typedef some_struct[any T] {
+ test()
+ {
+ i9 a = 'a' as i9;
+ {
+ /* at this point, only a is defined */
+ defer _putchar(a);
+
+ /* a gets shadowed */
+ i9 a = 'b' as i9;
+
+ /* defer should still point to the outer 'a' */
+ }
+ }
+}
+
+main()
+{
+ some_struct![i9] test = some_struct![i9]{};
+ test.test();
+}
diff --git a/tests/generic_defer.ek b/tests/generic_defer.ek
new file mode 100644
index 0000000..11c099c
--- /dev/null
+++ b/tests/generic_defer.ek
@@ -0,0 +1,17 @@
+define any[] {}
+
+typedef i27 {}
+typedef i9 {}
+
+typedef a[any T] {
+ T b;
+ do_stuff() {
+ defer do_stuff();
+ }
+}
+
+main()
+{
+ a![i27] a = a![i27]{.b = 10};
+ a![i9] b = a![i9]{.b = 20 as i9};
+}