on master help sign in
Load modules for ports lazily, should fix #793
commitc6beac38da8561b2aa65f73fc40984e5e40ff847 authorEvan Czaplicki <info@elm-lang.org> dateSun 30 Nov 2014, 22:28 (12 years ago) parent45c65c9
3 files changed+43−18
src/Generate/JavaScript.hs+1−11 src/Generate/JavaScript/Helpers.hs+21 src/Generate/JavaScript/Ports.hs+21−7
src/Generate/JavaScript.hs+1−11
@@ -25,16 +25,6 @@ import qualified AST.Pattern as P
2525import qualified AST.Variable as Var
2626
2727
28−varDecl :: String -> Expression () -> VarDecl ()
29−varDecl x expr =
30− VarDecl () (var x) (Just expr)
31−
32−
33−localRuntime :: String
34−localRuntime =
35− "_elm"
36−
37−
3828internalImports :: Module.Name -> [VarDecl ()]
3929internalImports name =
4030 [ varDecl "_N" (obj ["Elm","Native"])
@@ -46,7 +36,7 @@ internalImports name =
4636 where
4737 include :: String -> String -> VarDecl ()
4838 include alias modul =
49− varDecl alias (obj ["_N", modul, "make"] <| ref localRuntime)
39+ varDecl alias (Help.make ["_N", modul])
5040
5141
5242_Utils :: String -> Expression ()
src/Generate/JavaScript/Helpers.hs+21
@@ -4,6 +4,27 @@ import AST.Annotation (Region)
44import qualified AST.PrettyPrint as PP
55import Language.ECMAScript3.Syntax
66
7+
8+localRuntime :: String
9+localRuntime =
10+ "_elm"
11+
12+
13+varDecl :: String -> Expression () -> VarDecl ()
14+varDecl x expr =
15+ VarDecl () (var x) (Just expr)
16+
17+
18+make :: [String] -> Expression ()
19+make moduleName =
20+ obj (moduleName ++ ["make"]) <| ref localRuntime
21+
22+
23+useLazy :: [String] -> String -> Expression ()
24+useLazy moduleName functionName =
25+ DotRef () (make moduleName) (var functionName)
26+
27+
728-- Creating Variables
829
930var :: String -> Id ()
src/Generate/JavaScript/Ports.hs+21−7
@@ -2,7 +2,6 @@ module Generate.JavaScript.Ports (incoming, outgoing) where
22
33import qualified Data.List as List
44import Generate.JavaScript.Helpers
5−import qualified Generate.JavaScript.Variable as V
65import AST.Type as T
76import qualified AST.Variable as Var
87import Language.ECMAScript3.Syntax
@@ -27,6 +26,21 @@ typeToString tipe =
2726 "an object with fields '" ++ List.intercalate "', '" fields ++ "'"
2827
2928
29+_Array :: String -> Expression ()
30+_Array functionName =
31+ useLazy ["Elm","Native","Array"] functionName
32+
33+
34+_List :: String -> Expression ()
35+_List functionName =
36+ useLazy ["Elm","Native","List"] functionName
37+
38+
39+_Maybe :: String -> Expression ()
40+_Maybe functionName =
41+ useLazy ["Elm","Maybe"] functionName
42+
43+
3044check :: Expression () -> JSType -> Expression () -> Expression ()
3145check x jsType continue =
3246 CondExpr () (jsFold OpLOr checks x) continue throw
@@ -89,14 +103,14 @@ inc tipe x =
89103 | Var.isMaybe name ->
90104 CondExpr ()
91105 (equal x (NullLit ()))
92− (V.value ["Maybe"] "Nothing")
93− (V.value ["Maybe"] "Just" <| inc t x)
106+ (_Maybe "Nothing")
107+ (_Maybe "Just" <| inc t x)
94108
95109 | Var.isList name ->
96− check x JSArray (obj ["_L","fromArray"] <| array)
110+ check x JSArray (_List "fromArray" <| array)
97111
98112 | Var.isArray name ->
99− check x JSArray (obj ["_A","fromJSArray"] <| array)
113+ check x JSArray (_Array "fromJSArray" <| array)
100114 where
101115 array = DotRef () x (var "map") <| incoming t
102116
@@ -181,10 +195,10 @@ out tipe x =
181195 (out t (DotRef () x (var "_0")))
182196
183197 | Var.isArray name ->
184− DotRef () (obj ["_A","toJSArray"] <| x) (var "map") <| outgoing t
198+ DotRef () (_Array "toJSArray" <| x) (var "map") <| outgoing t
185199
186200 | Var.isList name ->
187− DotRef () (obj ["_L","toArray"] <| x) (var "map") <| outgoing t
201+ DotRef () (_List "toArray" <| x) (var "map") <| outgoing t
188202
189203 Type name : ts
190204 | Var.isTuple name ->