on master help sign in
Load modules for ports lazily, should fix #793
c6beac3Evan Czaplicki
src/Generate/JavaScript.hs+1−11
@@ -25,16 +25,6 @@ import qualified AST.Pattern as P
25import qualified AST.Variable as Var
25import qualified AST.Variable as Var
26
26
27
27
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−
38internalImports :: Module.Name -> [VarDecl ()]
28internalImports :: Module.Name -> [VarDecl ()]
39internalImports name =
29internalImports name =
40 [ varDecl "_N" (obj ["Elm","Native"])
30 [ varDecl "_N" (obj ["Elm","Native"])
@@ -46,7 +36,7 @@ internalImports name =
46 where
36 where
47 include :: String -> String -> VarDecl ()
37 include :: String -> String -> VarDecl ()
48 include alias modul =
38 include alias modul =
49− varDecl alias (obj ["_N", modul, "make"] <| ref localRuntime)
39+ varDecl alias (Help.make ["_N", modul])
50
40
51
41
52_Utils :: String -> Expression ()
42_Utils :: String -> Expression ()
src/Generate/JavaScript/Helpers.hs+21
@@ -4,6 +4,27 @@ import AST.Annotation (Region)
4import qualified AST.PrettyPrint as PP
4import qualified AST.PrettyPrint as PP
5import Language.ECMAScript3.Syntax
5import Language.ECMAScript3.Syntax
6
6
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+
7-- Creating Variables
28-- Creating Variables
8
29
9var :: String -> Id ()
30var :: String -> Id ()
src/Generate/JavaScript/Ports.hs+21−7
@@ -2,7 +2,6 @@ module Generate.JavaScript.Ports (incoming, outgoing) where
2
2
3import qualified Data.List as List
3import qualified Data.List as List
4import Generate.JavaScript.Helpers
4import Generate.JavaScript.Helpers
5−import qualified Generate.JavaScript.Variable as V
6import AST.Type as T
5import AST.Type as T
7import qualified AST.Variable as Var
6import qualified AST.Variable as Var
8import Language.ECMAScript3.Syntax
7import Language.ECMAScript3.Syntax
@@ -27,6 +26,21 @@ typeToString tipe =
27 "an object with fields '" ++ List.intercalate "', '" fields ++ "'"
26 "an object with fields '" ++ List.intercalate "', '" fields ++ "'"
28
27
29
28
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+
30check :: Expression () -> JSType -> Expression () -> Expression ()
44check :: Expression () -> JSType -> Expression () -> Expression ()
31check x jsType continue =
45check x jsType continue =
32 CondExpr () (jsFold OpLOr checks x) continue throw
46 CondExpr () (jsFold OpLOr checks x) continue throw
@@ -89,14 +103,14 @@ inc tipe x =
89 | Var.isMaybe name ->
103 | Var.isMaybe name ->
90 CondExpr ()
104 CondExpr ()
91 (equal x (NullLit ()))
105 (equal x (NullLit ()))
92− (V.value ["Maybe"] "Nothing")
106+ (_Maybe "Nothing")
93− (V.value ["Maybe"] "Just" <| inc t x)
107+ (_Maybe "Just" <| inc t x)
94
108
95 | Var.isList name ->
109 | Var.isList name ->
96− check x JSArray (obj ["_L","fromArray"] <| array)
110+ check x JSArray (_List "fromArray" <| array)
97
111
98 | Var.isArray name ->
112 | Var.isArray name ->
99− check x JSArray (obj ["_A","fromJSArray"] <| array)
113+ check x JSArray (_Array "fromJSArray" <| array)
100 where
114 where
101 array = DotRef () x (var "map") <| incoming t
115 array = DotRef () x (var "map") <| incoming t
102
116
@@ -181,10 +195,10 @@ out tipe x =
181 (out t (DotRef () x (var "_0")))
195 (out t (DotRef () x (var "_0")))
182
196
183 | Var.isArray name ->
197 | Var.isArray name ->
184− DotRef () (obj ["_A","toJSArray"] <| x) (var "map") <| outgoing t
198+ DotRef () (_Array "toJSArray" <| x) (var "map") <| outgoing t
185
199
186 | Var.isList name ->
200 | Var.isList name ->
187− DotRef () (obj ["_L","toArray"] <| x) (var "map") <| outgoing t
201+ DotRef () (_List "toArray" <| x) (var "map") <| outgoing t
188
202
189 Type name : ts
203 Type name : ts
190 | Var.isTuple name ->
204 | Var.isTuple name ->