summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-02-20 10:27:15 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2014-02-20 10:27:15 -0500
commite76ee80695acce02b283d12eedc26477ace15b1f (patch)
tree42e00b6f554fae7021de8f1f5b912048114253df /tests
parenta5299611e8a126a86a7f2121aa339d69a9fa5895 (diff)
Some more nested functor bug-fixing, including generating fresh internal names at applications; still need to debug issues with datatype constructors
Diffstat (limited to 'tests')
-rw-r--r--tests/functorMadness.ur18
-rw-r--r--tests/functorMania.ur36
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/functorMadness.ur b/tests/functorMadness.ur
new file mode 100644
index 00000000..c7ddeaca
--- /dev/null
+++ b/tests/functorMadness.ur
@@ -0,0 +1,18 @@
+functor F(M : sig end) = struct
+ fun f () = f ()
+
+ functor G(M : sig end) = struct
+ fun g () = f ()
+ end
+end
+
+structure M1 = F(struct end)
+structure M2 = F(struct end)
+
+structure N1 = M1.G(struct end)
+structure N2 = M2.G(struct end)
+
+fun main () : transaction page =
+ return (N1.g ());
+ return (N2.g ());
+ return <xml/>
diff --git a/tests/functorMania.ur b/tests/functorMania.ur
new file mode 100644
index 00000000..c11ff473
--- /dev/null
+++ b/tests/functorMania.ur
@@ -0,0 +1,36 @@
+functor F1(M : sig type t end) = struct
+ type t = M.t
+ fun g () : M.t = g ()
+ fun f () = g ()
+end
+functor F2(M : sig type t end) = F1(M)
+functor F3(M : sig type t end) = F2(M)
+
+functor F4(M : sig end) = F1(struct type t = int end)
+functor F5(M : sig end) = F2(struct type t = int end)
+functor F6(M : sig end) = F3(struct type t = int end)
+
+functor F7(M : sig end) = F1(struct type t = string end)
+functor F8(M : sig end) = F2(struct type t = string end)
+functor F9(M : sig end) = F3(struct type t = string end)
+
+structure M1 = F1(struct type t = string end)
+structure M2 = F2(struct type t = string end)
+structure M3 = F3(struct type t = string end)
+
+structure M4 = F4(struct end)
+structure M5 = F5(struct end)
+structure M6 = F6(struct end)
+
+structure M7 = F7(struct end)
+structure M8 = F8(struct end)
+structure M9 = F9(struct end)
+
+fun loop x : unit = loop (M1.f (), M2.f (), M3.f (),
+ M4.f (), M5.f (), M6.f (),
+ M7.f (), M8.f (), M9.f ())
+
+fun main () : transaction page =
+ x <- error <xml/>;
+ u <- return (loop x);
+ return <xml/>