diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-12-05 14:01:34 -0500 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-12-05 14:01:34 -0500 |
commit | 6b9b07746ffdd3e3cec6e81287f1334038a41092 (patch) | |
tree | 27acc16bb8d3b12293fbbae8b833d7ff2e731aa9 /src | |
parent | 97c20e02541006584c5c2da552dffce23ef18f38 (diff) |
Represent FFI function names as strings, to deal with cross-file recursion
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler.sml | 4 | ||||
-rw-r--r-- | src/jscomp.sml | 24 | ||||
-rw-r--r-- | src/settings.sml | 1 |
3 files changed, 15 insertions, 14 deletions
diff --git a/src/compiler.sml b/src/compiler.sml index dcb5fdad..0d61b361 100644 --- a/src/compiler.sml +++ b/src/compiler.sml @@ -421,7 +421,7 @@ fun parseUrp' fname = dbms = mergeO #2 (#dbms old, #dbms new) } in - foldr (fn (fname, job) => merge (job, pu fname)) job (!libs) + foldr (fn (job', job) => merge (job, job')) job (!libs) end fun parsePkind s = @@ -551,7 +551,7 @@ fun parseUrp' fname = fkind := {action = Settings.Deny, kind = kind, pattern = pattern} :: !fkind end | _ => ErrorMsg.error "Bad 'deny' syntax") - | "library" => libs := relify arg :: !libs + | "library" => libs := pu (relify arg) :: !libs | "path" => (case String.fields (fn ch => ch = #"=") arg of [n, v] => pathmap := M.insert (!pathmap, n, v) diff --git a/src/jscomp.sml b/src/jscomp.sml index 8b946b39..4be870cb 100644 --- a/src/jscomp.sml +++ b/src/jscomp.sml @@ -657,7 +657,7 @@ fun process file = end) (str "null", st) args in - (strcat [str ("{c:\"f\",f:" ^ name ^ ",a:"), + (strcat [str ("{c:\"f\",f:\"" ^ name ^ "\",a:"), e, str "}"], st) @@ -692,7 +692,7 @@ fun process file = val (e, st) = jsE inner (e, st) in - (strcat [str ("{c:\"f\",f:" ^ name ^ ",a:cons("), + (strcat [str ("{c:\"f\",f:\"" ^ name ^ "\",a:cons("), e, str ",null)}"], st) @@ -715,7 +715,7 @@ fun process file = val (e1, st) = jsE inner (e1, st) val (e2, st) = jsE inner (e2, st) in - (strcat [str ("{c:\"f\",f:" ^ name ^ ",a:cons("), + (strcat [str ("{c:\"f\",f:\"" ^ name ^ "\",a:cons("), e1, str ",cons(", e2, @@ -819,14 +819,14 @@ fun process file = val (e1, st) = jsE inner (e1, st) val (e2, st) = jsE inner (e2, st) in - (strcat [str "{c:\"f\",f:cat,a:cons(", e1, str ",cons(", e2, str ",null))}"], st) + (strcat [str "{c:\"f\",f:\"cat\",a:cons(", e1, str ",cons(", e2, str ",null))}"], st) end | EError (e, _) => let val (e, st) = jsE inner (e, st) in - (strcat [str "{c:\"f\",f:er,a:cons(", e, str ",null)}"], + (strcat [str "{c:\"f\",f:\"er\",a:cons(", e, str ",null)}"], st) end @@ -875,7 +875,7 @@ fun process file = let val (e, st) = jsE inner (e, st) in - (strcat [str "{c:\"f\",f:sr,a:cons(", + (strcat [str "{c:\"f\",f:\"sr\",a:cons(", e, str ",null)}"], st) @@ -885,7 +885,7 @@ fun process file = val (e1, st) = jsE inner (e1, st) val (e2, st) = jsE inner (e2, st) in - (strcat [str "{c:\"f\",f:sb,a:cons(", + (strcat [str "{c:\"f\",f:\"sb\",a:cons(", e1, str ",cons(", e2, @@ -896,7 +896,7 @@ fun process file = let val (e, st) = jsE inner (e, st) in - (strcat [str "{c:\"f\",f:ss,a:cons(", + (strcat [str "{c:\"f\",f:\"ss\",a:cons(", e, str ",null)}"], st) @@ -907,7 +907,7 @@ fun process file = val (e, st) = jsE inner (e, st) val (unurl, st) = unurlifyExp loc (t, st) in - (strcat [str ("{c:\"f\",f:rc,a:cons({c:\"c\",v:\"" + (strcat [str ("{c:\"f\",f:\"rc\",a:cons({c:\"c\",v:\"" ^ Settings.getUrlPrefix () ^ "\"},cons("), e, @@ -925,7 +925,7 @@ fun process file = val (e, st) = jsE inner (e, st) val (unurl, st) = unurlifyExp loc (t, st) in - (strcat [str ("{c:\"f\",f:rv,a:cons("), + (strcat [str ("{c:\"f\",f:\"rv\",a:cons("), e, str (",cons({c:\"c\",v:function(s){var t=s.split(\"/\");var i=0;return " ^ unurl ^ "}},cons({c:\"K\"},null)))}")], @@ -936,7 +936,7 @@ fun process file = let val (e, st) = jsE inner (e, st) in - (strcat [str "{c:\"f\",f:sl,a:cons(", + (strcat [str "{c:\"f\",f:\"sl\",a:cons(", e, str ",cons({c:\"K\"},null))}"], st) @@ -946,7 +946,7 @@ fun process file = let val (e, st) = jsE inner (e, st) in - (strcat [str "{c:\"f\",f:sp,a:cons(", + (strcat [str "{c:\"f\",f:\"sp\",a:cons(", e, str ",null)}"], st) diff --git a/src/settings.sml b/src/settings.sml index 009e2b0a..4b226a7b 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -160,6 +160,7 @@ val jsFuncsBase = basisM [("alert", "alert"), ("attrifyFloat", "ts"), ("attrifyBool", "bs"), ("boolToString", "ts"), + ("str1", "id"), ("strsub", "sub"), ("strsuffix", "suf"), ("strlen", "slen"), |