summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 15:09:53 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 15:09:53 -0400
commit62c0731399525d736de1c4e303c1abd1677a8d0c (patch)
tree4c9288ddb1fba9991f128d3f6569c0382303dc72
parent6cac02596e21666de5658f83957d3fa7d7b60a8c (diff)
Compiling a con-tuple-using test case
-rw-r--r--src/reduce.sml3
-rw-r--r--tests/ctuple.lac9
-rw-r--r--tests/tuple.lac2
3 files changed, 13 insertions, 1 deletions
diff --git a/src/reduce.sml b/src/reduce.sml
index c2359c26..e8d51da7 100644
--- a/src/reduce.sml
+++ b/src/reduce.sml
@@ -123,6 +123,9 @@ fun con env c =
(_, _, SOME c') => #1 c'
| _ => c)
| CConcat ((CRecord (k, xcs1), loc), (CRecord (_, xcs2), _)) => CRecord (k, xcs1 @ xcs2)
+
+ | CProj ((CTuple cs, _), n) => #1 (List.nth (cs, n - 1))
+
| _ => c
and reduceCon env = U.Con.mapB {kind = kind, con = con, bind = bindC} env
diff --git a/tests/ctuple.lac b/tests/ctuple.lac
new file mode 100644
index 00000000..68c1301f
--- /dev/null
+++ b/tests/ctuple.lac
@@ -0,0 +1,9 @@
+val page = fn p :: (Type * Type) => fn f : p.1 -> string => fn x : p.1 => <html><body>
+ {cdata (f x)}
+</body></html>
+
+val page_string = page [(string, int)] (fn x => x)
+
+val main : unit -> page = fn () => <html><body>
+ <a link={page_string "Hi"}>Hi</a>
+</body></html>
diff --git a/tests/tuple.lac b/tests/tuple.lac
index fb14aad9..555cfd0c 100644
--- a/tests/tuple.lac
+++ b/tests/tuple.lac
@@ -10,4 +10,4 @@ val bizarro_x = case x of (a, b, c) => (c, a, b)
val main : unit -> page = fn () => <html><body>
{cdata bizarro_x.1}
-</body></html> \ No newline at end of file
+</body></html>