# HG changeset patch # User Adam Chlipala # Date 1244316574 14400 # Node ID e4a02e4fa35c61a6fdb4f136fac8ef0d79754875 # Parent b2413e4dd1098021e3d5ac125aea762d4f0054f4 Fix unbound name problem in Jscomp injectors; more List stuff diff -r b2413e4dd109 -r e4a02e4fa35c lib/ur/list.ur --- a/lib/ur/list.ur Sat Jun 06 14:09:30 2009 -0400 +++ b/lib/ur/list.ur Sat Jun 06 15:29:34 2009 -0400 @@ -150,3 +150,14 @@ search' end +fun foldlM [m] (_ : monad m) [a] [b] f = + let + fun foldlM' acc ls = + case ls of + [] => return acc + | x :: ls => + acc <- f x acc; + foldlM' acc ls + in + foldlM' + end diff -r b2413e4dd109 -r e4a02e4fa35c lib/ur/list.urs --- a/lib/ur/list.urs Sat Jun 06 14:09:30 2009 -0400 +++ b/lib/ur/list.urs Sat Jun 06 15:29:34 2009 -0400 @@ -24,6 +24,9 @@ val exists : a ::: Type -> (a -> bool) -> t a -> bool +val foldlM : m ::: (Type -> Type) -> monad m -> a ::: Type -> b ::: Type + -> (a -> b -> m b) -> b -> t a -> m b + val foldlMap : a ::: Type -> b ::: Type -> c ::: Type -> (a -> b -> c * b) -> b -> t a -> t c * b diff -r b2413e4dd109 -r e4a02e4fa35c src/jscomp.sml --- a/src/jscomp.sml Sat Jun 06 14:09:30 2009 -0400 +++ b/src/jscomp.sml Sat Jun 06 15:29:34 2009 -0400 @@ -42,7 +42,7 @@ end) type state = { - decls : decl list, + decls : (string * int * (string * int * typ option) list) list, script : string list, included : IS.set, injectors : int IM.map, @@ -301,8 +301,8 @@ {disc = t, result = s}), loc) val body = (EAbs ("x", t, s, body), loc) - val st = {decls = (DValRec [("jsify", n', (TFun (t, s), loc), - body, "jsify")], loc) :: #decls st, + val st = {decls = ("jsify", n', (TFun (t, s), loc), + body, "jsify") :: #decls st, script = #script st, included = #included st, injectors = #injectors st, @@ -362,8 +362,8 @@ {disc = t, result = s}), loc) val body = (EAbs ("x", t, s, body), loc) - val st = {decls = (DValRec [("jsify", n', (TFun (t, s), loc), - body, "jsify")], loc) :: #decls st, + val st = {decls = ("jsify", n', (TFun (t, s), loc), + body, "jsify") :: #decls st, script = #script st, included = #included st, injectors = #injectors st, @@ -1337,8 +1337,13 @@ let (*val () = Print.preface ("doDecl", MonoPrint.p_decl MonoEnv.empty d)*) val (d, st) = decl (d, st) + + val ds = + case #decls st of + [] => [d] + | vis => [(DValRec vis, #2 d), d] in - (List.revAppend (#decls st, [d]), + (ds, {decls = [], script = #script st, included = #included st,