on master help sign in
Make sure that modules are only instantiated once.
ca75e60Evan Czaplicki
compiler/Generate/JavaScript.hs+5−4
@@ -54,13 +54,15 @@ jsModule modul =
54 run $ do
54 run $ do
55 body <- toJS . fst . SD.flattenLets [] $ program modul
55 body <- toJS . fst . SD.flattenLets [] $ program modul
56 foreignImport <- mapM importEvent (foreignImports modul)
56 foreignImport <- mapM importEvent (foreignImports modul)
57− return $ concat [ setup ("Elm": names modul)
57+ return $ concat [ setup ("Elm" : names modul)
58 , globalAssign ("Elm." ++ modName)
58 , globalAssign ("Elm." ++ modName)
59 (jsFunc "elm" $ makeProgram body foreignImport) ]
59 (jsFunc "elm" $ makeProgram body foreignImport) ]
60 where
60 where
61 modName = dotSep (names modul)
61 modName = dotSep (names modul)
62 makeProgram body foreignImport =
62 makeProgram body foreignImport =
63+ concat [ setup ("elm" : names modul)
64+ , "\nif (elm." ++ modName ++ ") return elm." ++ modName ++ ";"
63− concat [ "\nvar " ++ usefulFuncs ++ ";"
65+ , "\nvar " ++ usefulFuncs ++ ";"
64 , concatMap jsImport (imports modul)
66 , concatMap jsImport (imports modul)
65 , concat foreignImport
67 , concat foreignImport
66 , assign "_op" "{}"
68 , assign "_op" "{}"
@@ -72,8 +74,7 @@ jsModule modul =
72 map dotSep . drop 2 . List.inits $ init names
74 map dotSep . drop 2 . List.inits $ init names
73 usefulFuncs = commaSep (map (uncurry assign') (internalImports modName))
75 usefulFuncs = commaSep (map (uncurry assign') (internalImports modName))
74
76
75− jsExports = setup ("elm" : names modul) ++
76− ret (assign' ("elm." ++ modName) (brackets exs))
77+ jsExports = ret (assign' ("elm." ++ modName) (brackets exs))
77 where
78 where
78 exs = indent . commaSep . concatMap pair $ "_op" : exports modul
79 exs = indent . commaSep . concatMap pair $ "_op" : exports modul
79 pair x | isOp x = []
80 pair x | isOp x = []