summaryrefslogtreecommitdiff
path: root/src/corify.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-06-22 10:06:50 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-06-22 10:06:50 -0400
commit8f7e31d24652037510c5eac81f56e711a5212246 (patch)
treeb49a43cb3509875ddcef8115771edc97d6b90cbb /src/corify.sml
parent197464e083280200927182432789b7b0b92e8f8c (diff)
Better FFI function handling
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,