@@ -16,6 +16,7 @@ import qualified Data.IntMap as IntMap
16import qualified Data.List as List
16import qualified Data.List as List
17import Data.Map ((!))
17import Data.Map ((!))
18import qualified Data.Map as Map
18import qualified Data.Map as Map
19+import qualified Data.Name as Name
19import qualified Data.Set as Set
20import qualified Data.Set as Set
20import qualified Data.Text.Encoding as Text
21import qualified Data.Text.Encoding as Text
21import qualified Data.Utf8 as Utf8
22import qualified Data.Utf8 as Utf8
@@ -26,12 +27,11 @@ import qualified AST.Module.Name as ModuleName
26import qualified Data.Index as Index
27import qualified Data.Index as Index
27import qualified Elm.Compiler.Type as Type
28import qualified Elm.Compiler.Type as Type
28import qualified Elm.Compiler.Type.Extract as Extract
29import qualified Elm.Compiler.Type.Extract as Extract
29−import qualified Elm.Name as N
30import qualified Elm.Package as Pkg
30import qualified Elm.Package as Pkg
31import qualified Elm.Compiler.Version as Version
31import qualified Elm.Compiler.Version as Version
32import qualified Generate.JavaScript.Builder as JS
32import qualified Generate.JavaScript.Builder as JS
33import qualified Generate.JavaScript.Mode as Mode
33import qualified Generate.JavaScript.Mode as Mode
34−import qualified Generate.JavaScript.Name as Name
34+import qualified Generate.JavaScript.Name as JsName
35import qualified Json.Encode as Encode
35import qualified Json.Encode as Encode
36import qualified Optimize.DecisionTree as DT
36import qualified Optimize.DecisionTree as DT
37import qualified Reporting.Region as R
37import qualified Reporting.Region as R
@@ -71,15 +71,15 @@ generate mode expression =
71 JsExpr $ JS.Float float
71 JsExpr $ JS.Float float
73 Opt.VarLocal name ->
73 Opt.VarLocal name ->
74− JsExpr $ JS.Ref (Name.fromLocal name)
74+ JsExpr $ JS.Ref (JsName.fromLocal name)
76 Opt.VarGlobal (Opt.Global home name) ->
76 Opt.VarGlobal (Opt.Global home name) ->
77− JsExpr $ JS.Ref (Name.fromGlobal home name)
77+ JsExpr $ JS.Ref (JsName.fromGlobal home name)
79 Opt.VarEnum (Opt.Global home name) index ->
79 Opt.VarEnum (Opt.Global home name) index ->
80 case mode of
80 case mode of
81 Mode.Dev _ _ ->
81 Mode.Dev _ _ ->
82− JsExpr $ JS.Ref (Name.fromGlobal home name)
82+ JsExpr $ JS.Ref (JsName.fromGlobal home name)
84 Mode.Prod _ _ ->
84 Mode.Prod _ _ ->
85 JsExpr $ JS.Int (Index.toMachine index)
85 JsExpr $ JS.Int (Index.toMachine index)
@@ -87,32 +87,32 @@ generate mode expression =
87 Opt.VarBox (Opt.Global home name) ->
87 Opt.VarBox (Opt.Global home name) ->
88 JsExpr $ JS.Ref $
88 JsExpr $ JS.Ref $
89 case mode of
89 case mode of
90− Mode.Dev _ _ -> Name.fromGlobal home name
90+ Mode.Dev _ _ -> JsName.fromGlobal home name
91− Mode.Prod _ _ -> Name.fromGlobal ModuleName.basics N.identity
91+ Mode.Prod _ _ -> JsName.fromGlobal ModuleName.basics Name.identity
93 Opt.VarCycle home name ->
93 Opt.VarCycle home name ->
94− JsExpr $ JS.Call (JS.Ref (Name.fromCycle home name)) []
94+ JsExpr $ JS.Call (JS.Ref (JsName.fromCycle home name)) []
96 Opt.VarDebug name home region unhandledValueName ->
96 Opt.VarDebug name home region unhandledValueName ->
97 JsExpr $ generateDebug name home region unhandledValueName
97 JsExpr $ generateDebug name home region unhandledValueName
99 Opt.VarKernel home name ->
99 Opt.VarKernel home name ->
100− JsExpr $ JS.Ref (Name.fromKernel home name)
100+ JsExpr $ JS.Ref (JsName.fromKernel home name)
102 Opt.List entries ->
102 Opt.List entries ->
103 case entries of
103 case entries of
105− JsExpr $ JS.Ref (Name.fromKernel N.list "Nil")
105+ JsExpr $ JS.Ref (JsName.fromKernel Name.list "Nil")
110− (JS.Ref (Name.fromKernel N.list "fromArray"))
110+ (JS.Ref (JsName.fromKernel Name.list "fromArray"))
111 [ JS.Array $ map (generateJsExpr mode) entries
111 [ JS.Array $ map (generateJsExpr mode) entries
114 Opt.Function args body ->
114 Opt.Function args body ->
115− generateFunction (map Name.fromLocal args) (generate mode body)
115+ generateFunction (map JsName.fromLocal args) (generate mode body)
117 Opt.Call func args ->
117 Opt.Call func args ->
118 JsExpr $ generateCall mode func args
118 JsExpr $ generateCall mode func args
@@ -130,7 +130,7 @@ generate mode expression =
130 Opt.Destruct (Opt.Destructor name path) body ->
130 Opt.Destruct (Opt.Destructor name path) body ->
132 pathExpr = generatePath mode path
132 pathExpr = generatePath mode path
133− pathDef = JS.Var [ (Name.fromLocal name, Just pathExpr) ]
133+ pathDef = JS.Var [ (JsName.fromLocal name, Just pathExpr) ]
135 JsBlock $ pathDef : codeToStmtList (generate mode body)
135 JsBlock $ pathDef : codeToStmtList (generate mode body)
@@ -138,9 +138,9 @@ generate mode expression =
138 JsBlock $ generateCase mode label root decider jumps
138 JsBlock $ generateCase mode label root decider jumps
140 Opt.Accessor field ->
140 Opt.Accessor field ->
141− JsExpr $ JS.Function Nothing [Name.dollar]
141+ JsExpr $ JS.Function Nothing [JsName.dollar]
142 [ JS.Return $ Just $
142 [ JS.Return $ Just $
143− JS.Access (JS.Ref Name.dollar) (generateField mode field)
143+ JS.Access (JS.Ref JsName.dollar) (generateField mode field)
146 Opt.Access record field ->
146 Opt.Access record field ->
@@ -148,7 +148,7 @@ generate mode expression =
149 Opt.Update record fields ->
149 Opt.Update record fields ->
151− JS.Call (JS.Ref (Name.fromKernel N.utils "update"))
151+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "update"))
152 [ generateJsExpr mode record
152 [ generateJsExpr mode record
153 , generateRecord mode fields
153 , generateRecord mode fields
@@ -159,7 +159,7 @@ generate mode expression =
159 Opt.Unit ->
159 Opt.Unit ->
160 case mode of
160 case mode of
161 Mode.Dev _ _ ->
161 Mode.Dev _ _ ->
162− JsExpr $ JS.Ref (Name.fromKernel N.utils "Tuple0")
162+ JsExpr $ JS.Ref (JsName.fromKernel Name.utils "Tuple0")
164 Mode.Prod _ _ ->
164 Mode.Prod _ _ ->
165 JsExpr $ JS.Int 0
165 JsExpr $ JS.Int 0
@@ -168,13 +168,13 @@ generate mode expression =
169 case maybeC of
169 case maybeC of
170 Nothing ->
170 Nothing ->
171− JS.Call (JS.Ref (Name.fromKernel N.utils "Tuple2"))
171+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "Tuple2"))
172 [ generateJsExpr mode a
172 [ generateJsExpr mode a
173 , generateJsExpr mode b
173 , generateJsExpr mode b
176 Just c ->
176 Just c ->
177− JS.Call (JS.Ref (Name.fromKernel N.utils "Tuple3"))
177+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "Tuple3"))
178 [ generateJsExpr mode a
178 [ generateJsExpr mode a
179 , generateJsExpr mode b
179 , generateJsExpr mode b
180 , generateJsExpr mode c
180 , generateJsExpr mode c
@@ -183,17 +183,17 @@ generate mode expression =
183 Opt.Shader src attributes uniforms ->
183 Opt.Shader src attributes uniforms ->
185 toTranlation field =
185 toTranlation field =
186− ( Name.fromLocal field
186+ ( JsName.fromLocal field
187− , JS.String (Name.toBuilder (generateField mode field))
187+ , JS.String (JsName.toBuilder (generateField mode field))
190 toTranslationObject fields =
190 toTranslationObject fields =
191 JS.Object (map toTranlation (Set.toList fields))
191 JS.Object (map toTranlation (Set.toList fields))
193 JsExpr $ JS.Object $
193 JsExpr $ JS.Object $
194− [ ( Name.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
194+ [ ( JsName.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
195− , ( Name.fromLocal "attributes", toTranslationObject attributes )
195+ , ( JsName.fromLocal "attributes", toTranslationObject attributes )
196− , ( Name.fromLocal "uniforms", toTranslationObject uniforms )
196+ , ( JsName.fromLocal "uniforms", toTranslationObject uniforms )
@@ -255,7 +255,7 @@ codeToStmt code =
255{-# NOINLINE toChar #-}
255{-# NOINLINE toChar #-}
256toChar :: JS.Expr
256toChar :: JS.Expr
258− JS.Ref (Name.fromKernel N.utils "chr")
258+ JS.Ref (JsName.fromKernel Name.utils "chr")
@@ -266,18 +266,18 @@ generateCtor :: Mode.Mode -> Opt.Global -> Index.ZeroBased -> Int -> Code
266generateCtor mode (Opt.Global home name) index arity =
266generateCtor mode (Opt.Global home name) index arity =
268 argNames =
268 argNames =
269− Index.indexedMap (\i _ -> Name.fromIndex i) [1 .. arity]
269+ Index.indexedMap (\i _ -> JsName.fromIndex i) [1 .. arity]
271 ctorTag =
271 ctorTag =
272 case mode of
272 case mode of
273− Mode.Dev _ _ -> JS.String (N.toBuilder name)
273+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
274 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
274 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
276 generateFunction argNames $ JsExpr $ JS.Object $
276 generateFunction argNames $ JsExpr $ JS.Object $
277− (Name.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
277+ (JsName.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
280−ctorToInt :: ModuleName.Canonical -> N.Name -> Index.ZeroBased -> Int
280+ctorToInt :: ModuleName.Canonical -> Name.Name -> Index.ZeroBased -> Int
281ctorToInt home name index =
281ctorToInt home name index =
282 if home == ModuleName.dict && name == "RBNode_elm_builtin" || name == "RBEmpty_elm_builtin" then
282 if home == ModuleName.dict && name == "RBNode_elm_builtin" || name == "RBEmpty_elm_builtin" then
283 0 - Index.toHuman index
283 0 - Index.toHuman index
@@ -289,7 +289,7 @@ ctorToInt home name index =
289-- RECORDS
289-- RECORDS
292−generateRecord :: Mode.Mode -> Map.Map N.Name Opt.Expr -> JS.Expr
292+generateRecord :: Mode.Mode -> Map.Map Name.Name Opt.Expr -> JS.Expr
293generateRecord mode fields =
293generateRecord mode fields =
295 toPair (field, value) =
295 toPair (field, value) =
@@ -298,11 +298,11 @@ generateRecord mode fields =
298 JS.Object (map toPair (Map.toList fields))
298 JS.Object (map toPair (Map.toList fields))
301−generateField :: Mode.Mode -> N.Name -> Name.Name
301+generateField :: Mode.Mode -> Name.Name -> JsName.Name
302generateField mode name =
302generateField mode name =
303 case mode of
303 case mode of
304 Mode.Dev _ _ ->
304 Mode.Dev _ _ ->
305− Name.fromLocal name
305+ JsName.fromLocal name
307 Mode.Prod _ fields ->
307 Mode.Prod _ fields ->
308 fields ! name
308 fields ! name
@@ -313,39 +313,39 @@ generateField mode name =
316−generateDebug :: N.Name -> ModuleName.Canonical -> R.Region -> Maybe N.Name -> JS.Expr
316+generateDebug :: Name.Name -> ModuleName.Canonical -> R.Region -> Maybe Name.Name -> JS.Expr
317generateDebug name (ModuleName.Canonical _ home) region unhandledValueName =
317generateDebug name (ModuleName.Canonical _ home) region unhandledValueName =
318 if name /= "todo" then
318 if name /= "todo" then
319− JS.Ref (Name.fromGlobal ModuleName.debug name)
319+ JS.Ref (JsName.fromGlobal ModuleName.debug name)
321 case unhandledValueName of
321 case unhandledValueName of
322 Nothing ->
322 Nothing ->
323− JS.Call (JS.Ref (Name.fromKernel N.debug "todo")) $
323+ JS.Call (JS.Ref (JsName.fromKernel Name.debug "todo")) $
324− [ JS.String (N.toBuilder home)
324+ [ JS.String (Name.toBuilder home)
325 , regionToJsExpr region
325 , regionToJsExpr region
328 Just valueName ->
328 Just valueName ->
329− JS.Call (JS.Ref (Name.fromKernel N.debug "todoCase")) $
329+ JS.Call (JS.Ref (JsName.fromKernel Name.debug "todoCase")) $
330− [ JS.String (N.toBuilder home)
330+ [ JS.String (Name.toBuilder home)
331 , regionToJsExpr region
331 , regionToJsExpr region
332− , JS.Ref (Name.fromLocal valueName)
332+ , JS.Ref (JsName.fromLocal valueName)
336regionToJsExpr :: R.Region -> JS.Expr
336regionToJsExpr :: R.Region -> JS.Expr
337regionToJsExpr (R.Region start end) =
337regionToJsExpr (R.Region start end) =
338 JS.Object
338 JS.Object
339− [ ( Name.fromLocal "start", positionToJsExpr start )
339+ [ ( JsName.fromLocal "start", positionToJsExpr start )
340− , ( Name.fromLocal "end", positionToJsExpr end )
340+ , ( JsName.fromLocal "end", positionToJsExpr end )
344positionToJsExpr :: R.Position -> JS.Expr
344positionToJsExpr :: R.Position -> JS.Expr
345positionToJsExpr (R.Position line column) =
345positionToJsExpr (R.Position line column) =
346 JS.Object
346 JS.Object
347− [ ( Name.fromLocal "line", JS.Int line )
347+ [ ( JsName.fromLocal "line", JS.Int line )
348− , ( Name.fromLocal "column", JS.Int column )
348+ , ( JsName.fromLocal "column", JS.Int column )
@@ -353,7 +353,7 @@ positionToJsExpr (R.Position line column) =
353-- FUNCTION
353-- FUNCTION
356−generateFunction :: [Name.Name] -> Code -> Code
356+generateFunction :: [JsName.Name] -> Code -> Code
357generateFunction args body =
357generateFunction args body =
358 case IntMap.lookup (length args) funcHelpers of
358 case IntMap.lookup (length args) funcHelpers of
359 Just helper ->
359 Just helper ->
@@ -376,7 +376,7 @@ generateFunction args body =
376funcHelpers :: IntMap.IntMap JS.Expr
376funcHelpers :: IntMap.IntMap JS.Expr
377funcHelpers =
377funcHelpers =
378 IntMap.fromList $
378 IntMap.fromList $
379− map (\n -> (n, JS.Ref (Name.makeF n))) [2..9]
379+ map (\n -> (n, JS.Ref (JsName.makeF n))) [2..9]
@@ -413,9 +413,9 @@ generateCallHelp mode func args =
413 (map (generateJsExpr mode) args)
413 (map (generateJsExpr mode) args)
416−generateGlobalCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
416+generateGlobalCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
417generateGlobalCall home name args =
417generateGlobalCall home name args =
418− generateNormalCall (JS.Ref (Name.fromGlobal home name)) args
418+ generateNormalCall (JS.Ref (JsName.fromGlobal home name)) args
421generateNormalCall :: JS.Expr -> [JS.Expr] -> JS.Expr
421generateNormalCall :: JS.Expr -> [JS.Expr] -> JS.Expr
@@ -432,7 +432,7 @@ generateNormalCall func args =
432callHelpers :: IntMap.IntMap JS.Expr
432callHelpers :: IntMap.IntMap JS.Expr
433callHelpers =
433callHelpers =
434 IntMap.fromList $
434 IntMap.fromList $
435− map (\n -> (n, JS.Ref (Name.makeA n))) [2..9]
435+ map (\n -> (n, JS.Ref (JsName.makeA n))) [2..9]
@@ -441,36 +441,36 @@ callHelpers =
442generateCoreCall :: Mode.Mode -> Opt.Global -> [Opt.Expr] -> JS.Expr
442generateCoreCall :: Mode.Mode -> Opt.Global -> [Opt.Expr] -> JS.Expr
443generateCoreCall mode (Opt.Global home@(ModuleName.Canonical _ moduleName) name) args =
443generateCoreCall mode (Opt.Global home@(ModuleName.Canonical _ moduleName) name) args =
444− if moduleName == N.basics then
444+ if moduleName == Name.basics then
445 generateBasicsCall mode home name args
445 generateBasicsCall mode home name args
447− else if moduleName == N.bitwise then
447+ else if moduleName == Name.bitwise then
448 generateBitwiseCall home name (map (generateJsExpr mode) args)
448 generateBitwiseCall home name (map (generateJsExpr mode) args)
450− else if moduleName == N.tuple then
450+ else if moduleName == Name.tuple then
451 generateTupleCall home name (map (generateJsExpr mode) args)
451 generateTupleCall home name (map (generateJsExpr mode) args)
453− else if moduleName == N.jsArray then
453+ else if moduleName == Name.jsArray then
454 generateJsArrayCall home name (map (generateJsExpr mode) args)
454 generateJsArrayCall home name (map (generateJsExpr mode) args)
457 generateGlobalCall home name (map (generateJsExpr mode) args)
457 generateGlobalCall home name (map (generateJsExpr mode) args)
460−generateTupleCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
460+generateTupleCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
461generateTupleCall home name args =
461generateTupleCall home name args =
462 case args of
462 case args of
463 [value] ->
463 [value] ->
464 case name of
464 case name of
465− "first" -> JS.Access value (Name.fromLocal "a")
465+ "first" -> JS.Access value (JsName.fromLocal "a")
466− "second" -> JS.Access value (Name.fromLocal "b")
466+ "second" -> JS.Access value (JsName.fromLocal "b")
467 _ -> generateGlobalCall home name args
467 _ -> generateGlobalCall home name args
470 generateGlobalCall home name args
470 generateGlobalCall home name args
473−generateJsArrayCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
473+generateJsArrayCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
474generateJsArrayCall home name args =
474generateJsArrayCall home name args =
475 case args of
475 case args of
476 [entry] | name == "singleton" -> JS.Array [entry]
476 [entry] | name == "singleton" -> JS.Array [entry]
@@ -478,7 +478,7 @@ generateJsArrayCall home name args =
478 _ -> generateGlobalCall home name args
478 _ -> generateGlobalCall home name args
481−generateBitwiseCall :: ModuleName.Canonical -> N.Name -> [JS.Expr] -> JS.Expr
481+generateBitwiseCall :: ModuleName.Canonical -> Name.Name -> [JS.Expr] -> JS.Expr
482generateBitwiseCall home name args =
482generateBitwiseCall home name args =
483 case args of
483 case args of
@@ -500,7 +500,7 @@ generateBitwiseCall home name args =
500 generateGlobalCall home name args
500 generateGlobalCall home name args
503−generateBasicsCall :: Mode.Mode -> ModuleName.Canonical -> N.Name -> [Opt.Expr] -> JS.Expr
503+generateBasicsCall :: Mode.Mode -> ModuleName.Canonical -> Name.Name -> [Opt.Expr] -> JS.Expr
504generateBasicsCall mode home name args =
504generateBasicsCall mode home name args =
505 case args of
505 case args of
506 [elmArg] ->
506 [elmArg] ->
@@ -551,7 +551,7 @@ equal left right =
551 if isLiteral left || isLiteral right then
551 if isLiteral left || isLiteral right then
552 strictEq left right
552 strictEq left right
554− JS.Call (JS.Ref (Name.fromKernel N.utils "eq")) [left, right]
554+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "eq")) [left, right]
557notEqual :: JS.Expr -> JS.Expr -> JS.Expr
557notEqual :: JS.Expr -> JS.Expr -> JS.Expr
@@ -560,7 +560,7 @@ notEqual left right =
560 strictNEq left right
560 strictNEq left right
562 JS.Prefix JS.PrefixLNot $
562 JS.Prefix JS.PrefixLNot $
563− JS.Call (JS.Ref (Name.fromKernel N.utils "eq")) [left, right]
563+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "eq")) [left, right]
566cmp :: JS.InfixOp -> JS.InfixOp -> Int -> JS.Expr -> JS.Expr -> JS.Expr
566cmp :: JS.InfixOp -> JS.InfixOp -> Int -> JS.Expr -> JS.Expr -> JS.Expr
@@ -569,7 +569,7 @@ cmp idealOp backupOp backupInt left right =
569 JS.Infix idealOp left right
569 JS.Infix idealOp left right
571 JS.Infix backupOp
571 JS.Infix backupOp
572− (JS.Call (JS.Ref (Name.fromKernel N.utils "cmp")) [left, right])
572+ (JS.Call (JS.Ref (JsName.fromKernel Name.utils "cmp")) [left, right])
573 (JS.Int backupInt)
573 (JS.Int backupInt)
@@ -616,7 +616,7 @@ append mode left right =
617jsAppend :: JS.Expr -> JS.Expr -> JS.Expr
617jsAppend :: JS.Expr -> JS.Expr -> JS.Expr
618jsAppend a b =
618jsAppend a b =
619− JS.Call (JS.Ref (Name.fromKernel N.utils "ap")) [a, b]
619+ JS.Call (JS.Ref (JsName.fromKernel Name.utils "ap")) [a, b]
622toSeqs :: Mode.Mode -> Opt.Expr -> [JS.Expr]
622toSeqs :: Mode.Mode -> Opt.Expr -> [JS.Expr]
@@ -692,19 +692,19 @@ strictNEq left right =
693-- TODO check if JS minifiers collapse unnecessary temporary variables
693-- TODO check if JS minifiers collapse unnecessary temporary variables
695−generateTailCall :: Mode.Mode -> N.Name -> [(N.Name, Opt.Expr)] -> [JS.Stmt]
695+generateTailCall :: Mode.Mode -> Name.Name -> [(Name.Name, Opt.Expr)] -> [JS.Stmt]
696generateTailCall mode name args =
696generateTailCall mode name args =
698 toTempVars (argName, arg) =
698 toTempVars (argName, arg) =
699− ( Name.makeTemp argName, Just (generateJsExpr mode arg) )
699+ ( JsName.makeTemp argName, Just (generateJsExpr mode arg) )
701 toRealVars (argName, _) =
701 toRealVars (argName, _) =
702 JS.ExprStmt $
702 JS.ExprStmt $
703− JS.Assign (JS.LRef (Name.fromLocal argName)) (JS.Ref (Name.makeTemp argName))
703+ JS.Assign (JS.LRef (JsName.fromLocal argName)) (JS.Ref (JsName.makeTemp argName))
705 JS.Var (map toTempVars args)
705 JS.Var (map toTempVars args)
706 : map toRealVars args
706 : map toRealVars args
707− ++ [ JS.Continue (Just (Name.fromLocal name)) ]
707+ ++ [ JS.Continue (Just (JsName.fromLocal name)) ]
@@ -715,16 +715,16 @@ generateDef :: Mode.Mode -> Opt.Def -> JS.Stmt
715generateDef mode def =
715generateDef mode def =
716 case def of
716 case def of
717 Opt.Def name body ->
717 Opt.Def name body ->
718− JS.Var [ (Name.fromLocal name, Just (generateJsExpr mode body)) ]
718+ JS.Var [ (JsName.fromLocal name, Just (generateJsExpr mode body)) ]
720 Opt.TailDef name argNames body ->
720 Opt.TailDef name argNames body ->
721− JS.Var [ (Name.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
721+ JS.Var [ (JsName.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
724−generateTailDef :: Mode.Mode -> N.Name -> [N.Name] -> Opt.Expr -> Code
724+generateTailDef :: Mode.Mode -> Name.Name -> [Name.Name] -> Opt.Expr -> Code
725generateTailDef mode name argNames body =
725generateTailDef mode name argNames body =
726− generateFunction (map Name.fromLocal argNames) $ JsBlock $
726+ generateFunction (map JsName.fromLocal argNames) $ JsBlock $
727− [ JS.Labelled (Name.fromLocal name) $
727+ [ JS.Labelled (JsName.fromLocal name) $
728 JS.While (JS.Bool True) $
728 JS.While (JS.Bool True) $
729 codeToStmt $ generate mode body
729 codeToStmt $ generate mode body
@@ -738,10 +738,10 @@ generatePath :: Mode.Mode -> Opt.Path -> JS.Expr
738generatePath mode path =
738generatePath mode path =
739 case path of
739 case path of
740 Opt.Index index subPath ->
740 Opt.Index index subPath ->
741− JS.Access (generatePath mode subPath) (Name.fromIndex index)
741+ JS.Access (generatePath mode subPath) (JsName.fromIndex index)
743 Opt.Root name ->
743 Opt.Root name ->
744− JS.Ref (Name.fromLocal name)
744+ JS.Ref (JsName.fromLocal name)
746 Opt.Field field subPath ->
746 Opt.Field field subPath ->
747 JS.Access (generatePath mode subPath) (generateField mode field)
747 JS.Access (generatePath mode subPath) (generateField mode field)
@@ -749,7 +749,7 @@ generatePath mode path =
749 Opt.Unbox subPath ->
749 Opt.Unbox subPath ->
750 case mode of
750 case mode of
751 Mode.Dev _ _ ->
751 Mode.Dev _ _ ->
752− JS.Access (generatePath mode subPath) (Name.fromIndex Index.first)
752+ JS.Access (generatePath mode subPath) (JsName.fromIndex Index.first)
754 Mode.Prod _ _ ->
754 Mode.Prod _ _ ->
755 generatePath mode subPath
755 generatePath mode subPath
@@ -824,30 +824,30 @@ crushIfsHelp visitedBranches unvisitedBranches final =
824-- CASE EXPRESSIONS
824-- CASE EXPRESSIONS
827−generateCase :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
827+generateCase :: Mode.Mode -> Name.Name -> Name.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
828generateCase mode label root decider jumps =
828generateCase mode label root decider jumps =
829 foldr (goto mode label) (generateDecider mode label root decider) jumps
829 foldr (goto mode label) (generateDecider mode label root decider) jumps
832−goto :: Mode.Mode -> N.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
832+goto :: Mode.Mode -> Name.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
833goto mode label (index, branch) stmts =
833goto mode label (index, branch) stmts =
835 labeledDeciderStmt =
835 labeledDeciderStmt =
836 JS.Labelled
836 JS.Labelled
837− (Name.makeLabel label index)
837+ (JsName.makeLabel label index)
838 (JS.While (JS.Bool True) (JS.Block stmts))
838 (JS.While (JS.Bool True) (JS.Block stmts))
840 labeledDeciderStmt : codeToStmtList (generate mode branch)
840 labeledDeciderStmt : codeToStmtList (generate mode branch)
843−generateDecider :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
843+generateDecider :: Mode.Mode -> Name.Name -> Name.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
844generateDecider mode label root decisionTree =
844generateDecider mode label root decisionTree =
845 case decisionTree of
845 case decisionTree of
846 Opt.Leaf (Opt.Inline branch) ->
846 Opt.Leaf (Opt.Inline branch) ->
847 codeToStmtList (generate mode branch)
847 codeToStmtList (generate mode branch)
849 Opt.Leaf (Opt.Jump index) ->
849 Opt.Leaf (Opt.Jump index) ->
850− [ JS.Break (Just (Name.makeLabel label index)) ]
850+ [ JS.Break (Just (JsName.makeLabel label index)) ]
852 Opt.Chain testChain success failure ->
852 Opt.Chain testChain success failure ->
853 [ JS.IfStmt
853 [ JS.IfStmt
@@ -867,7 +867,7 @@ generateDecider mode label root decisionTree =
870−generateIfTest :: Mode.Mode -> N.Name -> (DT.Path, DT.Test) -> JS.Expr
870+generateIfTest :: Mode.Mode -> Name.Name -> (DT.Path, DT.Test) -> JS.Expr
871generateIfTest mode root (path, test) =
871generateIfTest mode root (path, test) =
873 value = pathToJsExpr mode root path
873 value = pathToJsExpr mode root path
@@ -877,16 +877,16 @@ generateIfTest mode root (path, test) =
879 case mode of
879 case mode of
880− Mode.Dev _ _ -> JS.Access value Name.dollar
880+ Mode.Dev _ _ -> JS.Access value JsName.dollar
881 Mode.Prod _ _ ->
881 Mode.Prod _ _ ->
882 case opts of
882 case opts of
883− Can.Normal -> JS.Access value Name.dollar
883+ Can.Normal -> JS.Access value JsName.dollar
884 Can.Enum -> value
884 Can.Enum -> value
885 Can.Unbox -> value
885 Can.Unbox -> value
887 strictEq tag $
887 strictEq tag $
888 case mode of
888 case mode of
889− Mode.Dev _ _ -> JS.String (N.toBuilder name)
889+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
890 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
890 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
892 DT.IsBool True ->
892 DT.IsBool True ->
@@ -901,25 +901,25 @@ generateIfTest mode root (path, test) =
901 DT.IsChr char ->
901 DT.IsChr char ->
902 strictEq (JS.String (Utf8.toBuilder char)) $
902 strictEq (JS.String (Utf8.toBuilder char)) $
903 case mode of
903 case mode of
904− Mode.Dev _ _ -> JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
904+ Mode.Dev _ _ -> JS.Call (JS.Access value (JsName.fromLocal "valueOf")) []
905 Mode.Prod _ _ -> value
905 Mode.Prod _ _ -> value
907 DT.IsStr string ->
907 DT.IsStr string ->
908 strictEq value (JS.String (Utf8.toBuilder string))
908 strictEq value (JS.String (Utf8.toBuilder string))
910 DT.IsCons ->
910 DT.IsCons ->
911− JS.Access value (Name.fromLocal "b")
911+ JS.Access value (JsName.fromLocal "b")
913 DT.IsNil ->
913 DT.IsNil ->
914 JS.Prefix JS.PrefixLNot $
914 JS.Prefix JS.PrefixLNot $
915− JS.Access value (Name.fromLocal "b")
915+ JS.Access value (JsName.fromLocal "b")
917 DT.IsTuple ->
917 DT.IsTuple ->
918 error "COMPILER BUG - there should never be tests on a tuple"
918 error "COMPILER BUG - there should never be tests on a tuple"
922−generateCaseBranch :: Mode.Mode -> N.Name -> N.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
922+generateCaseBranch :: Mode.Mode -> Name.Name -> Name.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
923generateCaseBranch mode label root (test, subTree) =
923generateCaseBranch mode label root (test, subTree) =
925 (generateCaseValue mode test)
925 (generateCaseValue mode test)
@@ -931,7 +931,7 @@ generateCaseValue mode test =
931 case test of
931 case test of
932 DT.IsCtor home name index _ _ ->
932 DT.IsCtor home name index _ _ ->
933 case mode of
933 case mode of
934− Mode.Dev _ _ -> JS.String (N.toBuilder name)
934+ Mode.Dev _ _ -> JS.String (Name.toBuilder name)
935 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
935 Mode.Prod _ _ -> JS.Int (ctorToInt home name index)
937 DT.IsInt int ->
937 DT.IsInt int ->
@@ -956,24 +956,24 @@ generateCaseValue mode test =
956 error "COMPILER BUG - there should never be three tests on a tuple"
956 error "COMPILER BUG - there should never be three tests on a tuple"
959−generateCaseTest :: Mode.Mode -> N.Name -> DT.Path -> DT.Test -> JS.Expr
959+generateCaseTest :: Mode.Mode -> Name.Name -> DT.Path -> DT.Test -> JS.Expr
960generateCaseTest mode root path exampleTest =
960generateCaseTest mode root path exampleTest =
962 value = pathToJsExpr mode root path
962 value = pathToJsExpr mode root path
964 case exampleTest of
964 case exampleTest of
965 DT.IsCtor home name _ _ opts ->
965 DT.IsCtor home name _ _ opts ->
966− if name == N.bool && home == ModuleName.basics then
966+ if name == Name.bool && home == ModuleName.basics then
969 case mode of
969 case mode of
970 Mode.Dev _ _ ->
970 Mode.Dev _ _ ->
971− JS.Access value Name.dollar
971+ JS.Access value JsName.dollar
973 Mode.Prod _ _ ->
973 Mode.Prod _ _ ->
974 case opts of
974 case opts of
975 Can.Normal ->
975 Can.Normal ->
976− JS.Access value Name.dollar
976+ JS.Access value JsName.dollar
978 Can.Enum ->
978 Can.Enum ->
@@ -990,7 +990,7 @@ generateCaseTest mode root path exampleTest =
990 DT.IsChr _ ->
990 DT.IsChr _ ->
991 case mode of
991 case mode of
992 Mode.Dev _ _ ->
992 Mode.Dev _ _ ->
993− JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
993+ JS.Call (JS.Access value (JsName.fromLocal "valueOf")) []
995 Mode.Prod _ _ ->
995 Mode.Prod _ _ ->
@@ -1012,22 +1012,22 @@ generateCaseTest mode root path exampleTest =
1012-- PATTERN PATHS
1012-- PATTERN PATHS
1015−pathToJsExpr :: Mode.Mode -> N.Name -> DT.Path -> JS.Expr
1015+pathToJsExpr :: Mode.Mode -> Name.Name -> DT.Path -> JS.Expr
1016pathToJsExpr mode root path =
1016pathToJsExpr mode root path =
1017 case path of
1017 case path of
1018 DT.Index index subPath ->
1018 DT.Index index subPath ->
1019− JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex index)
1019+ JS.Access (pathToJsExpr mode root subPath) (JsName.fromIndex index)
1021 DT.Unbox subPath ->
1021 DT.Unbox subPath ->
1022 case mode of
1022 case mode of
1023 Mode.Dev _ _ ->
1023 Mode.Dev _ _ ->
1024− JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex Index.first)
1024+ JS.Access (pathToJsExpr mode root subPath) (JsName.fromIndex Index.first)
1026 Mode.Prod _ _ ->
1026 Mode.Prod _ _ ->
1027 pathToJsExpr mode root subPath
1027 pathToJsExpr mode root subPath
1029 DT.Empty ->
1029 DT.Empty ->
1030− JS.Ref (Name.fromLocal root)
1030+ JS.Ref (JsName.fromLocal root)
@@ -1038,13 +1038,13 @@ generateMain :: Mode.Mode -> ModuleName.Canonical -> Opt.Main -> JS.Expr
1038generateMain mode home main =
1038generateMain mode home main =
1039 case main of
1039 case main of
1040 Opt.Static ->
1040 Opt.Static ->
1041− JS.Ref (Name.fromKernel N.virtualDom "init")
1041+ JS.Ref (JsName.fromKernel Name.virtualDom "init")
1042− # JS.Ref (Name.fromGlobal home "main")
1042+ # JS.Ref (JsName.fromGlobal home "main")
1043 # JS.Int 0
1043 # JS.Int 0
1044 # JS.Int 0
1044 # JS.Int 0
1046 Opt.Dynamic msgType decoder ->
1046 Opt.Dynamic msgType decoder ->
1047− JS.Ref (Name.fromGlobal home "main")
1047+ JS.Ref (JsName.fromGlobal home "main")
1048 # generateJsExpr mode decoder
1048 # generateJsExpr mode decoder
1049 # toDebugMetadata mode msgType
1049 # toDebugMetadata mode msgType