Mercurial > urweb
diff src/corify.sml @ 50:d37518b67bd2
Better FFI function handling
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 22 Jun 2008 10:06:50 -0400 |
parents | 874e877d2c51 |
children | c1e21ab42896 |
line wrap: on
line diff
--- a/src/corify.sml Sun Jun 22 10:00:25 2008 -0400 +++ b/src/corify.sml Sun Jun 22 10:06:50 2008 -0400 @@ -263,7 +263,9 @@ | St.Ffi (_, NONE) => raise Fail "corifyExp: Unknown type for FFI expression variable" | St.Ffi (m, SOME t) => case t of - t as (L'.TFun _, _) => + (L'.TFun (dom as (L'.TRecord (L'.CRecord (_, []), _), _), ran), _) => + (L'.EAbs ("arg", dom, ran, (L'.EFfiApp (m, x, []), loc)), loc) + | t as (L'.TFun _, _) => let fun getArgs (all as (t, _), args) = case t of @@ -272,10 +274,10 @@ val (result, args) = getArgs (t, []) - val (app, _) = foldl (fn (_, (app, n)) => - ((L'.EApp (app, (L'.ERel n, loc)), loc), - n - 1)) ((L'.EFfi (m, x), loc), - length args - 1) args + val (actuals, _) = foldr (fn (_, (actuals, n)) => + ((L'.ERel n, loc) :: actuals, + n + 1)) ([], 0) args + val app = (L'.EFfiApp (m, x, actuals), loc) val (abs, _, _) = foldr (fn (t, (abs, ran, n)) => ((L'.EAbs ("arg" ^ Int.toString n, t,