summaryrefslogtreecommitdiff
path: root/src/corify.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/corify.sml')
-rw-r--r--src/corify.sml12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/corify.sml b/src/corify.sml
index 93eeeece..4046a02a 100644
--- a/src/corify.sml
+++ b/src/corify.sml
@@ -263,7 +263,9 @@ fun corifyExp st (e, loc) =
| 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 @@ fun corifyExp st (e, loc) =
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,