diff options
-rw-r--r-- | src/monoize.sml | 57 | ||||
-rw-r--r-- | tests/urlifyVariant.ur | 5 |
2 files changed, 36 insertions, 26 deletions
diff --git a/src/monoize.sml b/src/monoize.sml index 99d93ff9..1c11e5c7 100644 --- a/src/monoize.sml +++ b/src/monoize.sml @@ -357,13 +357,15 @@ fun fk2s fk = Attr => "attr" | Url => "url" +type vr = string * int * L'.typ * L'.exp * string + structure Fm :> sig type t val empty : int -> t - val lookup : t -> foo_kind -> int -> (int -> t -> L'.decl * t) -> t * int - val lookupList : t -> foo_kind -> L'.typ -> (int -> t -> L'.decl * t) -> t * int + val lookup : t -> foo_kind -> int -> (int -> t -> vr * t) -> t * int + val lookupList : t -> foo_kind -> L'.typ -> (int -> t -> vr * t) -> t * int val enter : t -> t val decls : t -> L'.decl list @@ -390,7 +392,7 @@ type t = { count : int, map : int IM.map M.map, listMap : int TM.map M.map, - decls : L'.decl list + decls : vr list } fun empty count = { @@ -418,7 +420,10 @@ fun freshName {count, map, listMap, decls} = in (next, {count = count , map = map, listMap = listMap, decls = decls}) end -fun decls ({decls, ...} : t) = decls +fun decls ({decls, ...} : t) = + case decls of + [] => [] + | _ => [(L'.DValRec decls, ErrorMsg.dummySpan)] fun lookup (t as {count, map, listMap, decls}) k n thunk = let @@ -567,17 +572,17 @@ fun fooifyExp fk env = val dom = tAll val ran = (L'.TFfi ("Basis", "string"), loc) in - ((L'.DValRec [(fk2s fk ^ "ify_" ^ x, - n, - (L'.TFun (dom, ran), loc), - (L'.EAbs ("x", - dom, - ran, - (L'.ECase ((L'.ERel 0, loc), - branches, - {disc = dom, - result = ran}), loc)), loc), - "")], loc), + ((fk2s fk ^ "ify_" ^ x, + n, + (L'.TFun (dom, ran), loc), + (L'.EAbs ("x", + dom, + ran, + (L'.ECase ((L'.ERel 0, loc), + branches, + {disc = dom, + result = ran}), loc)), loc), + ""), fm) end @@ -618,17 +623,17 @@ fun fooifyExp fk env = val dom = tAll val ran = (L'.TFfi ("Basis", "string"), loc) in - ((L'.DValRec [(fk2s fk ^ "ify_list", - n, - (L'.TFun (dom, ran), loc), - (L'.EAbs ("x", - dom, - ran, - (L'.ECase ((L'.ERel 0, loc), - branches, - {disc = dom, - result = ran}), loc)), loc), - "")], loc), + ((fk2s fk ^ "ify_list", + n, + (L'.TFun (dom, ran), loc), + (L'.EAbs ("x", + dom, + ran, + (L'.ECase ((L'.ERel 0, loc), + branches, + {disc = dom, + result = ran}), loc)), loc), + ""), fm) end diff --git a/tests/urlifyVariant.ur b/tests/urlifyVariant.ur new file mode 100644 index 00000000..aba162d3 --- /dev/null +++ b/tests/urlifyVariant.ur @@ -0,0 +1,5 @@ +datatype t = T of variant [A = t] + +fun main (x : t) : transaction page = return <xml><body> + <a link={main x}>Go</a> +</body></xml> |