Mercurial > urweb
diff src/cjrize.sml @ 121:91027db5a07c
Multiple arguments to web functions
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 13 Jul 2008 20:24:05 -0400 |
parents | 6230bdd122e7 |
children | 76a4d69719d8 |
line wrap: on
line diff
--- a/src/cjrize.sml Sun Jul 13 20:07:10 2008 -0400 +++ b/src/cjrize.sml Sun Jul 13 20:24:05 2008 -0400 @@ -165,16 +165,27 @@ val (t, sm) = cifyTyp (t, sm) val (d, sm) = case #1 t of - L'.TFun (dom, ran) => - (case #1 e of - L.EAbs (ax, _, _, e) => - let - val (e, sm) = cifyExp (e, sm) - in - (L'.DFun (x, n, ax, dom, ran, e), sm) - end - | _ => (ErrorMsg.errorAt loc "Function isn't explicit at code generation"; - (L'.DVal ("", 0, t, (L'.EPrim (Prim.Int 0), ErrorMsg.dummySpan)), sm))) + L'.TFun _ => + let + fun unravel (tAll as (t, _), eAll as (e, _)) = + case (t, e) of + (L'.TFun (dom, ran), L.EAbs (ax, _, _, e)) => + let + val (args, t, e) = unravel (ran, e) + in + ((ax, dom) :: args, t, e) + end + | (L'.TFun _, _) => + (ErrorMsg.errorAt loc "Function isn't explicit at code generation"; + ([], tAll, eAll)) + | _ => ([], tAll, eAll) + + val (args, ran, e) = unravel (t, e) + val (e, sm) = cifyExp (e, sm) + in + (L'.DFun (x, n, args, ran, e), sm) + end + | _ => let val (e, sm) = cifyExp (e, sm)