diff options
-rw-r--r-- | src/cjr_print.sml | 53 | ||||
-rw-r--r-- | src/monoize.sml | 2 |
2 files changed, 46 insertions, 9 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml index e69b87f1..65344ffb 100644 --- a/src/cjr_print.sml +++ b/src/cjr_print.sml @@ -1693,13 +1693,7 @@ and p_exp' par tail env (e, loc) = | EFfiApp (m, x, es) => pFuncall env (m, x, es, NONE) | EApp (f, args) => let - fun default () = parenIf par (box [p_exp' true false env f, - string "(ctx,", - space, - p_list_sep (box [string ",", space]) (p_exp' false false env) args, - string ")"]) - - fun isSelf n = + fun getSig n = let val (_, t) = E.lookupENamed env n @@ -1707,8 +1701,51 @@ and p_exp' par tail env (e, loc) = case #1 t of TFun (dom, t) => getSig (t, dom :: args) | _ => (args, t) + in + getSig (t, []) + end - val (argts, ret) = getSig (t, []) + fun default () = + case (#1 f, args) of + (ENamed n, _ :: _ :: _) => + let + val (args', ret) = getSig n + val args = ListPair.zip (args, args') + in + parenIf par (box [string "({", + newline, + p_list_sepi newline + (fn i => fn (e, t) => + box [p_typ env t, + space, + string ("arg" ^ Int.toString i), + space, + string "=", + space, + p_exp' false false env e, + string ";"]) + args, + newline, + p_exp' false false env f, + string "(ctx,", + space, + p_list_sepi (box [string ",", space]) + (fn i => fn _ => + string ("arg" ^ Int.toString i)) args, + string ");", + newline, + string "})"]) + end + | _ => + parenIf par (box [p_exp' true false env f, + string "(ctx,", + space, + p_list_sep (box [string ",", space]) (p_exp' false false env) args, + string ")"]) + + fun isSelf n = + let + val (argts, ret) = getSig n in parenIf par (box [string "({", newline, diff --git a/src/monoize.sml b/src/monoize.sml index d952c396..44cd8bb3 100644 --- a/src/monoize.sml +++ b/src/monoize.sml @@ -1410,7 +1410,7 @@ fun monoExp (env, st, fm) (all as (e, loc)) = [((L'.ERel 2, loc), (L'.TSource, loc)), ((L'.EJavaScript (L'.Source t, (L'.ERel 1, loc)), loc), - t)]), + (L'.TFfi ("Basis", "string"), loc))]), loc)), loc)), loc)), loc), fm) end |