on master help sign in
Import qualified name by default.
commit263bf1c0cc9e4b58a1fc9c8daeaa2ac0dfa32e9c authorevancz <info@elm-lang.org> dateSun 17 Mar 2013, 00:12 (14 years ago) parent7dbb052
1 file changed+18−6
compiler/Gen/CompileToJS.hs+18−6
compiler/Gen/CompileToJS.hs+18−6
@@ -62,11 +62,11 @@ jsModule (Module names exports imports stmts) =
6262 defs = assign "$op" "{}"
6363 program = "\nvar " ++ usefulFuncs ++ ";" ++ defs ++ includes ++ body ++
6464 setup ("elm":"Native":modNames) ++
65− assign "_" ("elm.Native." ++ modName ++ " || {}") ++
65+ assign "_" ("elm.Native." ++ modName ++ "||{}") ++
6666 getExports exports stmts ++ setup ("elm":modNames) ++
6767 ret (assign' ("elm." ++ modName) "_") ++ "\n"
68− setup modNames = concatMap (\n -> globalAssign n $ n ++ " || {}") .
69− map (intercalate ".") . tail . inits $ init modNames
68+ setup modNames = concatMap (\n -> globalAssign n $ n ++ "||{}") .
69+ map (intercalate ".") . drop 2 . inits $ init modNames
7070 usefulFuncs = intercalate ", " (map (uncurry assign') internalImports)
7171
7272getExports names stmts = "\n"++ intercalate ";\n" (op : map fnPair fns)
@@ -95,13 +95,25 @@ jsImport (modul, how) =
9595 case how of
9696 As name -> assign name ("Elm." ++ modul ++ parens "elm")
9797 Importing vs ->
98− "\nvar $ = Elm." ++ modul ++ parens "elm" ++ ";" ++
98+ "\nvar $ = Elm." ++ modul ++ parens "elm" ++ ";" ++ setup modul ++
9999 if null vs then "\nfor (var k in $) {eval('var '+k+'=$[\"'+k+'\"]')}"
100100 else "\nvar " ++ intercalate ", " (map def vs) ++ ";"
101101 where
102102 imprt v = assign' v ("$." ++ v)
103− def (o:p) =
104− imprt (if isOp o then "$op['" ++ o:p ++ "']" else deprime (o:p))
103+ def (o:p) = imprt (if isOp o then "$op['" ++ o:p ++ "']" else deprime (o:p))
104+ setup moduleName =
105+ "\nvar " ++ concatMap (++";") (defs ++ [assign' moduleName "$"])
106+ where
107+ defs = map (\n -> assign' n (n ++ "||{}")) (subnames moduleName)
108+ subnames = map (intercalate ".") . tail . inits . init . split
109+ split names = case go [] names of
110+ (name, []) -> [name]
111+ (name, ns) -> name : split ns
112+ go name str = case str of
113+ '.':rest -> (reverse name, rest)
114+ c:rest -> go (c:name) rest
115+ [] -> (reverse name, [])
116+
105117
106118
107119stmtsToJS :: [Statement] -> String