@@ -2,6 +2,7 @@
2module Generate.JavaScript.Expression
2module Generate.JavaScript.Expression
4 , generateCtor
4 , generateCtor
5 , generateTailDef
6 , generateTailDef
6 , generateMain
7 , generateMain
@@ -13,6 +14,7 @@ module Generate.JavaScript.Expression
14import qualified Data.IntMap as IntMap
15import qualified Data.IntMap as IntMap
15import qualified Data.List as List
16import qualified Data.List as List
16import qualified Data.Map as Map
18import qualified Data.Map as Map
17import qualified Data.Text.Encoding as Text
19import qualified Data.Text.Encoding as Text
@@ -22,11 +24,11 @@ import qualified AST.Module.Name as ModuleName
22import qualified Data.Index as Index
24import qualified Data.Index as Index
23import qualified Elm.Compiler.Type as Type
25import qualified Elm.Compiler.Type as Type
24import qualified Elm.Compiler.Type.Extract as Extract
26import qualified Elm.Compiler.Type.Extract as Extract
25−import qualified Elm.Interface as I
26import qualified Elm.Name as N
27import qualified Elm.Name as N
27import qualified Elm.Package as Pkg
28import qualified Elm.Package as Pkg
28import qualified Elm.Compiler.Version as Version
29import qualified Elm.Compiler.Version as Version
29import qualified Generate.JavaScript.Builder as JS
30import qualified Generate.JavaScript.Builder as JS
31+import qualified Generate.JavaScript.Mode as Mode
30import qualified Generate.JavaScript.Name as Name
32import qualified Generate.JavaScript.Name as Name
31import qualified Json.Encode as Encode
33import qualified Json.Encode as Encode
32import qualified Optimize.DecisionTree as DT
34import qualified Optimize.DecisionTree as DT
@@ -34,22 +36,15 @@ import qualified Reporting.Region as R
44-- EXPRESSIONS
39-- EXPRESSIONS
47−generateJsExpr :: Mode -> Opt.Expr -> JS.Expr
42+generateJsExpr :: Mode.Mode -> Opt.Expr -> JS.Expr
48generateJsExpr mode expression =
43generateJsExpr mode expression =
49 codeToExpr (generate mode expression)
44 codeToExpr (generate mode expression)
52−generate :: Mode -> Opt.Expr -> Code
47+generate :: Mode.Mode -> Opt.Expr -> Code
53generate mode expression =
48generate mode expression =
54 case expression of
49 case expression of
55 Opt.Bool bool ->
50 Opt.Bool bool ->
@@ -58,10 +53,10 @@ generate mode expression =
58 Opt.Chr char ->
53 Opt.Chr char ->
60 case mode of
55 case mode of
61− Name.Dev _ _ ->
56+ Mode.Dev _ _ ->
62 JS.Call toChar [ JS.String (Text.encodeUtf8Builder char) ]
57 JS.Call toChar [ JS.String (Text.encodeUtf8Builder char) ]
64− Name.Prod _ _ ->
59+ Mode.Prod _ _ ->
65 JS.String (Text.encodeUtf8Builder char)
60 JS.String (Text.encodeUtf8Builder char)
67 Opt.Str string ->
62 Opt.Str string ->
@@ -81,17 +76,17 @@ generate mode expression =
82 Opt.VarEnum (Opt.Global home name) index ->
77 Opt.VarEnum (Opt.Global home name) index ->
83 case mode of
78 case mode of
84− Name.Dev _ _ ->
79+ Mode.Dev _ _ ->
85 JsExpr $ JS.Ref (Name.fromGlobal home name)
80 JsExpr $ JS.Ref (Name.fromGlobal home name)
87− Name.Prod _ _ ->
82+ Mode.Prod _ _ ->
88 JsExpr $ JS.Int (Index.toMachine index)
83 JsExpr $ JS.Int (Index.toMachine index)
90 Opt.VarBox (Opt.Global home name) ->
85 Opt.VarBox (Opt.Global home name) ->
91 JsExpr $ JS.Ref $
86 JsExpr $ JS.Ref $
92 case mode of
87 case mode of
93− Name.Dev _ _ -> Name.fromGlobal home name
88+ Mode.Dev _ _ -> Name.fromGlobal home name
94− Name.Prod _ _ -> Name.fromGlobal ModuleName.basics N.identity
89+ Mode.Prod _ _ -> Name.fromGlobal ModuleName.basics N.identity
96 Opt.VarCycle home name ->
91 Opt.VarCycle home name ->
97 JsExpr $ JS.Call (JS.Ref (Name.fromCycle home name)) []
92 JsExpr $ JS.Call (JS.Ref (Name.fromCycle home name)) []
@@ -143,11 +138,11 @@ generate mode expression =
143 Opt.Accessor field ->
138 Opt.Accessor field ->
144 JsExpr $ JS.Function Nothing [Name.dollar]
139 JsExpr $ JS.Function Nothing [Name.dollar]
145 [ JS.Return $ Just $
140 [ JS.Return $ Just $
146− JS.Access (JS.Ref Name.dollar) (Name.fromField mode field)
141+ JS.Access (JS.Ref Name.dollar) (generateField mode field)
149 Opt.Access record field ->
144 Opt.Access record field ->
150− JsExpr $ JS.Access (generateJsExpr mode record) (Name.fromField mode field)
145+ JsExpr $ JS.Access (generateJsExpr mode record) (generateField mode field)
152 Opt.Update record fields ->
147 Opt.Update record fields ->
@@ -161,10 +156,10 @@ generate mode expression =
162 Opt.Unit ->
157 Opt.Unit ->
163 case mode of
158 case mode of
164− Name.Dev _ _ ->
159+ Mode.Dev _ _ ->
165 JsExpr $ JS.Ref (Name.fromKernel N.utils "Tuple0")
160 JsExpr $ JS.Ref (Name.fromKernel N.utils "Tuple0")
167− Name.Prod _ _ ->
162+ Mode.Prod _ _ ->
168 JsExpr $ JS.Int 0
163 JsExpr $ JS.Int 0
170 Opt.Tuple a b maybeC ->
165 Opt.Tuple a b maybeC ->
@@ -253,7 +248,7 @@ toChar =
256−generateCtor :: Mode -> N.Name -> Index.ZeroBased -> Int -> Code
251+generateCtor :: Mode.Mode -> N.Name -> Index.ZeroBased -> Int -> Code
257generateCtor mode name index arity =
252generateCtor mode name index arity =
259 argNames =
254 argNames =
@@ -261,8 +256,8 @@ generateCtor mode name index arity =
262 ctorTag =
257 ctorTag =
263 case mode of
258 case mode of
264− Name.Dev _ _ -> JS.String (N.toBuilder name)
259+ Mode.Dev _ _ -> JS.String (N.toBuilder name)
265− Name.Prod _ _ -> JS.Int (Index.toMachine index)
260+ Mode.Prod _ _ -> JS.Int (Index.toMachine index)
267 generateFunction argNames $ JsExpr $ JS.Object $
262 generateFunction argNames $ JsExpr $ JS.Object $
268 (Name.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
263 (Name.dollar, ctorTag) : map (\n -> (n, JS.Ref n)) argNames
@@ -272,15 +267,26 @@ generateCtor mode name index arity =
272-- RECORDS
267-- RECORDS
275−generateRecord :: Mode -> Map.Map N.Name Opt.Expr -> JS.Expr
270+generateRecord :: Mode.Mode -> Map.Map N.Name Opt.Expr -> JS.Expr
276generateRecord mode fields =
271generateRecord mode fields =
278 toPair (field, value) =
273 toPair (field, value) =
279− (Name.fromField mode field, generateJsExpr mode value)
274+ (generateField mode field, generateJsExpr mode value)
281 JS.Object (map toPair (Map.toList fields))
276 JS.Object (map toPair (Map.toList fields))
279+generateField :: Mode.Mode -> N.Name -> Name.Name
280+generateField mode name =
285+ Mode.Prod _ fields ->
@@ -355,7 +361,7 @@ funcHelpers =
358−generateCall :: Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
364+generateCall :: Mode.Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
359generateCall mode func args =
365generateCall mode func args =
360 case func of
366 case func of
361 Opt.VarGlobal global@(Opt.Global (ModuleName.Canonical pkg _) _) | pkg == Pkg.core ->
367 Opt.VarGlobal global@(Opt.Global (ModuleName.Canonical pkg _) _) | pkg == Pkg.core ->
@@ -363,10 +369,10 @@ generateCall mode func args =
364 Opt.VarBox _ ->
370 Opt.VarBox _ ->
365 case mode of
371 case mode of
366− Name.Dev _ _ ->
372+ Mode.Dev _ _ ->
367 generateCallHelp mode func args
373 generateCallHelp mode func args
369− Name.Prod _ _ ->
375+ Mode.Prod _ _ ->
370 case args of
376 case args of
372 generateJsExpr mode arg
378 generateJsExpr mode arg
@@ -378,7 +384,7 @@ generateCall mode func args =
378 generateCallHelp mode func args
384 generateCallHelp mode func args
381−generateCallHelp :: Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
387+generateCallHelp :: Mode.Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
382generateCallHelp mode func args =
388generateCallHelp mode func args =
383 generateNormalCall
389 generateNormalCall
384 (generateJsExpr mode func)
390 (generateJsExpr mode func)
@@ -411,7 +417,7 @@ callHelpers =
411-- CORE CALLS
417-- CORE CALLS
414−generateCoreCall :: Mode -> Opt.Global -> [Opt.Expr] -> JS.Expr
420+generateCoreCall :: Mode.Mode -> Opt.Global -> [Opt.Expr] -> JS.Expr
415generateCoreCall mode (Opt.Global home@(ModuleName.Canonical _ moduleName) name) args =
421generateCoreCall mode (Opt.Global home@(ModuleName.Canonical _ moduleName) name) args =
416 if moduleName == N.basics then
422 if moduleName == N.basics then
417 generateBasicsCall mode home name args
423 generateBasicsCall mode home name args
@@ -472,7 +478,7 @@ generateBitwiseCall home name args =
472 generateGlobalCall home name args
478 generateGlobalCall home name args
475−generateBasicsCall :: Mode -> ModuleName.Canonical -> N.Name -> [Opt.Expr] -> JS.Expr
481+generateBasicsCall :: Mode.Mode -> ModuleName.Canonical -> N.Name -> [Opt.Expr] -> JS.Expr
476generateBasicsCall mode home name args =
482generateBasicsCall mode home name args =
477 case args of
483 case args of
478 [elmArg] ->
484 [elmArg] ->
@@ -564,7 +570,7 @@ isLiteral expr =
567−decomposeL :: Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
573+decomposeL :: Mode.Mode -> Opt.Expr -> [Opt.Expr] -> JS.Expr
568decomposeL mode expr funcs =
574decomposeL mode expr funcs =
569 case expr of
575 case expr of
570 Opt.Call (Opt.VarGlobal (Opt.Global home "composeL")) [left, func]
576 Opt.Call (Opt.VarGlobal (Opt.Global home "composeL")) [left, func]
@@ -576,7 +582,7 @@ decomposeL mode expr funcs =
576 Opt.Function [N.dollar] (foldr apply (Opt.VarLocal N.dollar) (expr:funcs))
582 Opt.Function [N.dollar] (foldr apply (Opt.VarLocal N.dollar) (expr:funcs))
579−decomposeR :: Mode -> [Opt.Expr] -> Opt.Expr -> JS.Expr
585+decomposeR :: Mode.Mode -> [Opt.Expr] -> Opt.Expr -> JS.Expr
580decomposeR mode funcs expr =
586decomposeR mode funcs expr =
581 case expr of
587 case expr of
582 Opt.Call (Opt.VarGlobal (Opt.Global home "composeR")) [func, right]
588 Opt.Call (Opt.VarGlobal (Opt.Global home "composeR")) [func, right]
@@ -601,7 +607,7 @@ apply func value =
601 Opt.Call func [value]
607 Opt.Call func [value]
604−append :: Mode -> Opt.Expr -> Opt.Expr -> JS.Expr
610+append :: Mode.Mode -> Opt.Expr -> Opt.Expr -> JS.Expr
605append mode left right =
611append mode left right =
606 let seqs = generateJsExpr mode left : toSeqs mode right in
612 let seqs = generateJsExpr mode left : toSeqs mode right in
607 if any isStringLiteral seqs then
613 if any isStringLiteral seqs then
@@ -615,7 +621,7 @@ jsAppend a b =
615 JS.Call (JS.Ref (Name.fromKernel N.utils "ap")) [a, b]
621 JS.Call (JS.Ref (Name.fromKernel N.utils "ap")) [a, b]
618−toSeqs :: Mode -> Opt.Expr -> [JS.Expr]
624+toSeqs :: Mode.Mode -> Opt.Expr -> [JS.Expr]
619toSeqs mode expr =
625toSeqs mode expr =
620 case expr of
626 case expr of
621 Opt.Call (Opt.VarGlobal (Opt.Global home "append")) [left, right]
627 Opt.Call (Opt.VarGlobal (Opt.Global home "append")) [left, right]
@@ -688,7 +694,7 @@ strictNEq left right =
689-- TODO check if JS minifiers collapse unnecessary temporary variables
695-- TODO check if JS minifiers collapse unnecessary temporary variables
691−generateTailCall :: Mode -> N.Name -> [(N.Name, Opt.Expr)] -> [JS.Stmt]
697+generateTailCall :: Mode.Mode -> N.Name -> [(N.Name, Opt.Expr)] -> [JS.Stmt]
692generateTailCall mode name args =
698generateTailCall mode name args =
694 toTempVars (argName, arg) =
700 toTempVars (argName, arg) =
@@ -707,7 +713,7 @@ generateTailCall mode name args =
707-- DEFINITIONS
713-- DEFINITIONS
710−generateDef :: Mode -> Opt.Def -> JS.Stmt
716+generateDef :: Mode.Mode -> Opt.Def -> JS.Stmt
711generateDef mode def =
717generateDef mode def =
712 case def of
718 case def of
713 Opt.Def name body ->
719 Opt.Def name body ->
@@ -717,7 +723,7 @@ generateDef mode def =
717 JS.Var [ (Name.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
723 JS.Var [ (Name.fromLocal name, Just (codeToExpr (generateTailDef mode name argNames body))) ]
720−generateTailDef :: Mode -> N.Name -> [N.Name] -> Opt.Expr -> Code
726+generateTailDef :: Mode.Mode -> N.Name -> [N.Name] -> Opt.Expr -> Code
721generateTailDef mode name argNames body =
727generateTailDef mode name argNames body =
722 generateFunction (map Name.fromLocal argNames) $ JsBlock $
728 generateFunction (map Name.fromLocal argNames) $ JsBlock $
723 [ JS.Labelled (Name.fromLocal name) $
729 [ JS.Labelled (Name.fromLocal name) $
@@ -730,7 +736,7 @@ generateTailDef mode name argNames body =
733−generatePath :: Mode -> Opt.Path -> JS.Expr
739+generatePath :: Mode.Mode -> Opt.Path -> JS.Expr
734generatePath mode path =
740generatePath mode path =
735 case path of
741 case path of
736 Opt.Index index subPath ->
742 Opt.Index index subPath ->
@@ -740,14 +746,14 @@ generatePath mode path =
740 JS.Ref (Name.fromLocal name)
746 JS.Ref (Name.fromLocal name)
742 Opt.Field field subPath ->
748 Opt.Field field subPath ->
743− JS.Access (generatePath mode subPath) (Name.fromField mode field)
749+ JS.Access (generatePath mode subPath) (generateField mode field)
745 Opt.Unbox subPath ->
751 Opt.Unbox subPath ->
746 case mode of
752 case mode of
747− Name.Dev _ _ ->
753+ Mode.Dev _ _ ->
748 JS.Access (generatePath mode subPath) (Name.fromIndex Index.first)
754 JS.Access (generatePath mode subPath) (Name.fromIndex Index.first)
750− Name.Prod _ _ ->
756+ Mode.Prod _ _ ->
751 generatePath mode subPath
757 generatePath mode subPath
@@ -755,7 +761,7 @@ generatePath mode path =
755-- GENERATE IFS
761-- GENERATE IFS
758−generateIf :: Mode -> [(Opt.Expr, Opt.Expr)] -> Opt.Expr -> Code
764+generateIf :: Mode.Mode -> [(Opt.Expr, Opt.Expr)] -> Opt.Expr -> Code
759generateIf mode givenBranches givenFinal =
765generateIf mode givenBranches givenFinal =
761 (branches, final) =
767 (branches, final) =
@@ -820,12 +826,12 @@ crushIfsHelp visitedBranches unvisitedBranches final =
820-- CASE EXPRESSIONS
826-- CASE EXPRESSIONS
823−generateCase :: Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
829+generateCase :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [(Int, Opt.Expr)] -> [JS.Stmt]
824generateCase mode label root decider jumps =
830generateCase mode label root decider jumps =
825 foldr (goto mode label) (generateDecider mode label root decider) jumps
831 foldr (goto mode label) (generateDecider mode label root decider) jumps
828−goto :: Mode -> N.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
834+goto :: Mode.Mode -> N.Name -> (Int, Opt.Expr) -> [JS.Stmt] -> [JS.Stmt]
829goto mode label (index, branch) stmts =
835goto mode label (index, branch) stmts =
831 labeledDeciderStmt =
837 labeledDeciderStmt =
@@ -836,7 +842,7 @@ goto mode label (index, branch) stmts =
836 labeledDeciderStmt : codeToStmtList (generate mode branch)
842 labeledDeciderStmt : codeToStmtList (generate mode branch)
839−generateDecider :: Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
845+generateDecider :: Mode.Mode -> N.Name -> N.Name -> Opt.Decider Opt.Choice -> [JS.Stmt]
840generateDecider mode label root decisionTree =
846generateDecider mode label root decisionTree =
841 case decisionTree of
847 case decisionTree of
842 Opt.Leaf (Opt.Inline branch) ->
848 Opt.Leaf (Opt.Inline branch) ->
@@ -863,7 +869,7 @@ generateDecider mode label root decisionTree =
866−generateIfTest :: Mode -> N.Name -> (DT.Path, DT.Test) -> JS.Expr
872+generateIfTest :: Mode.Mode -> N.Name -> (DT.Path, DT.Test) -> JS.Expr
867generateIfTest mode root (path, test) =
873generateIfTest mode root (path, test) =
869 value = pathToJsExpr mode root path
875 value = pathToJsExpr mode root path
@@ -872,8 +878,8 @@ generateIfTest mode root (path, test) =
872 DT.IsCtor name index _ _ ->
878 DT.IsCtor name index _ _ ->
873 strictEq (JS.Access value Name.dollar) $
879 strictEq (JS.Access value Name.dollar) $
874 case mode of
880 case mode of
875− Name.Dev _ _ -> JS.String (N.toBuilder name)
881+ Mode.Dev _ _ -> JS.String (N.toBuilder name)
876− Name.Prod _ _ -> JS.Int (Index.toMachine index)
882+ Mode.Prod _ _ -> JS.Int (Index.toMachine index)
878 DT.IsInt int ->
884 DT.IsInt int ->
879 strictEq value (JS.Int int)
885 strictEq value (JS.Int int)
@@ -881,8 +887,8 @@ generateIfTest mode root (path, test) =
881 DT.IsChr char ->
887 DT.IsChr char ->
882 strictEq (JS.String (Text.encodeUtf8Builder char)) $
888 strictEq (JS.String (Text.encodeUtf8Builder char)) $
883 case mode of
889 case mode of
884− Name.Dev _ _ -> JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
890+ Mode.Dev _ _ -> JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
885− Name.Prod _ _ -> value
891+ Mode.Prod _ _ -> value
887 DT.IsStr string ->
893 DT.IsStr string ->
888 strictEq value (JS.String (Text.encodeUtf8Builder string))
894 strictEq value (JS.String (Text.encodeUtf8Builder string))
@@ -899,20 +905,20 @@ generateIfTest mode root (path, test) =
902−generateCaseBranch :: Mode -> N.Name -> N.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
908+generateCaseBranch :: Mode.Mode -> N.Name -> N.Name -> (DT.Test, Opt.Decider Opt.Choice) -> JS.Case
903generateCaseBranch mode label root (test, subTree) =
909generateCaseBranch mode label root (test, subTree) =
905 (generateCaseValue mode test)
911 (generateCaseValue mode test)
906 (generateDecider mode label root subTree)
912 (generateDecider mode label root subTree)
909−generateCaseValue :: Mode -> DT.Test -> JS.Expr
915+generateCaseValue :: Mode.Mode -> DT.Test -> JS.Expr
910generateCaseValue mode test =
916generateCaseValue mode test =
911 case test of
917 case test of
912 DT.IsCtor name index _ _ ->
918 DT.IsCtor name index _ _ ->
913 case mode of
919 case mode of
914− Name.Dev _ _ -> JS.String (N.toBuilder name)
920+ Mode.Dev _ _ -> JS.String (N.toBuilder name)
915− Name.Prod _ _ -> JS.Int (Index.toMachine index)
921+ Mode.Prod _ _ -> JS.Int (Index.toMachine index)
917 DT.IsInt int ->
923 DT.IsInt int ->
918 JS.Int int
924 JS.Int int
@@ -933,7 +939,7 @@ generateCaseValue mode test =
933 error "COMPILER BUG - there should never be three tests on a tuple"
939 error "COMPILER BUG - there should never be three tests on a tuple"
936−generateCaseTest :: Mode -> N.Name -> DT.Path -> DT.Test -> JS.Expr
942+generateCaseTest :: Mode.Mode -> N.Name -> DT.Path -> DT.Test -> JS.Expr
937generateCaseTest mode root path exampleTest =
943generateCaseTest mode root path exampleTest =
939 value = pathToJsExpr mode root path
945 value = pathToJsExpr mode root path
@@ -941,10 +947,10 @@ generateCaseTest mode root path exampleTest =
941 case exampleTest of
947 case exampleTest of
942 DT.IsCtor _ _ _ opts ->
948 DT.IsCtor _ _ _ opts ->
943 case mode of
949 case mode of
944− Name.Dev _ _ ->
950+ Mode.Dev _ _ ->
945 JS.Access value Name.dollar
951 JS.Access value Name.dollar
947− Name.Prod _ _ ->
953+ Mode.Prod _ _ ->
948 case opts of
954 case opts of
949 Can.Normal ->
955 Can.Normal ->
950 JS.Access value Name.dollar
956 JS.Access value Name.dollar
@@ -963,10 +969,10 @@ generateCaseTest mode root path exampleTest =
964 DT.IsChr _ ->
970 DT.IsChr _ ->
965 case mode of
971 case mode of
966− Name.Dev _ _ ->
972+ Mode.Dev _ _ ->
967 JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
973 JS.Call (JS.Access value (Name.fromLocal "valueOf")) []
969− Name.Prod _ _ ->
975+ Mode.Prod _ _ ->
972 DT.IsCons ->
978 DT.IsCons ->
@@ -983,7 +989,7 @@ generateCaseTest mode root path exampleTest =
983-- PATTERN PATHS
989-- PATTERN PATHS
986−pathToJsExpr :: Mode -> N.Name -> DT.Path -> JS.Expr
992+pathToJsExpr :: Mode.Mode -> N.Name -> DT.Path -> JS.Expr
987pathToJsExpr mode root path =
993pathToJsExpr mode root path =
988 case path of
994 case path of
989 DT.Index index subPath ->
995 DT.Index index subPath ->
@@ -991,10 +997,10 @@ pathToJsExpr mode root path =
992 DT.Unbox subPath ->
998 DT.Unbox subPath ->
993 case mode of
999 case mode of
994− Name.Dev _ _ ->
1000+ Mode.Dev _ _ ->
995 JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex Index.first)
1001 JS.Access (pathToJsExpr mode root subPath) (Name.fromIndex Index.first)
997− Name.Prod _ _ ->
1003+ Mode.Prod _ _ ->
998 pathToJsExpr mode root subPath
1004 pathToJsExpr mode root subPath
1000 DT.Empty ->
1006 DT.Empty ->
@@ -1005,8 +1011,8 @@ pathToJsExpr mode root path =
1005-- GENERATE MAIN
1011-- GENERATE MAIN
1008−generateMain :: Mode -> I.Interfaces -> ModuleName.Canonical -> Opt.Main -> JS.Expr
1014+generateMain :: Mode.Mode -> ModuleName.Canonical -> Opt.Main -> JS.Expr
1009−generateMain mode interfaces home main =
1015+generateMain mode home main =
1010 case main of
1016 case main of
1011 Opt.Static ->
1017 Opt.Static ->
1012 JS.Ref (Name.fromKernel N.virtualDom "init")
1018 JS.Ref (Name.fromKernel N.virtualDom "init")
@@ -1017,7 +1023,7 @@ generateMain mode interfaces home main =
1017 Opt.Dynamic msgType decoder ->
1023 Opt.Dynamic msgType decoder ->
1018 JS.Ref (Name.fromGlobal home "main")
1024 JS.Ref (Name.fromGlobal home "main")
1019 # generateJsExpr mode decoder
1025 # generateJsExpr mode decoder
1020− # toDebugMetadata mode interfaces msgType
1026+ # toDebugMetadata mode msgType
1023(#) :: JS.Expr -> JS.Expr -> JS.Expr
1029(#) :: JS.Expr -> JS.Expr -> JS.Expr
@@ -1025,19 +1031,17 @@ generateMain mode interfaces home main =
1025 JS.Call func [arg]
1031 JS.Call func [arg]
1028−toDebugMetadata :: Mode -> I.Interfaces -> Can.Type -> JS.Expr
1034+toDebugMetadata :: Mode.Mode -> Can.Type -> JS.Expr
1029−toDebugMetadata mode interfaces msgType =
1035+toDebugMetadata mode msgType =
1030 case mode of
1036 case mode of
1031− Name.Prod _ _ ->
1037+ Mode.Prod _ _ ->
1032 JS.Int 0
1038 JS.Int 0
1034− Name.Dev _ debugger ->
1040+ Mode.Dev _ Nothing ->
1036− Name.DebuggerOff ->
1037− JS.Int 0
1041+ JS.Int 0
1039− Name.DebuggerOn ->
1043+ Mode.Dev _ (Just interfaces) ->
1040− JS.Json $ Encode.object $
1044+ JS.Json $ Encode.object $
1041− [ ("versions", Encode.object [ ("elm", Pkg.encodeVersion Version.version) ])
1045+ [ ("versions", Encode.object [ ("elm", Pkg.encodeVersion Version.version) ])
1042− , ("types", Type.encodeMetadata (Extract.fromMsg interfaces msgType))
1046+ , ("types", Type.encodeMetadata (Extract.fromMsg interfaces msgType))