diff options
Diffstat (limited to 'test/cminor/lists.cm')
-rw-r--r-- | test/cminor/lists.cm | 27 |
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]; + } +} + |