aboutsummaryrefslogtreecommitdiffstats
path: root/test/cminor/lists.cm
diff options
context:
space:
mode:
Diffstat (limited to 'test/cminor/lists.cm')
-rw-r--r--test/cminor/lists.cm27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/cminor/lists.cm b/test/cminor/lists.cm
new file mode 100644
index 00000000..c4456236
--- /dev/null
+++ b/test/cminor/lists.cm
@@ -0,0 +1,27 @@
+/* List manipulations */
+
+"buildlist"(n): int -> int
+{
+ var b;
+
+ if (n < 0) return 0;
+ b = alloc 8;
+ int32[b] = n;
+ int32[b+4] = "buildlist"(n - 1) : int -> int;
+ return b;
+}
+
+"reverselist"(l): int -> int
+{
+ var r, r2;
+ r = 0;
+ loop {
+ if (l == 0) return r;
+ r2 = alloc 8;
+ int32[r2] = int32[l];
+ int32[r2+4] = r;
+ r = r2;
+ l = int32[l+4];
+ }
+}
+