@@ -15,19 +15,18 @@ import Data.Map ((!))
15import qualified Data.Map as Map
15import qualified Data.Map as Map
16import qualified Data.Name as Name
16import qualified Data.Name as Name
17import qualified Data.Set as Set
17import qualified Data.Set as Set
18−import qualified Data.Text as Text
18+import qualified Data.Utf8 as Utf8
19−import qualified Data.Text.Encoding as Text
21import qualified AST.Canonical as Can
20import qualified AST.Canonical as Can
22import qualified AST.Optimized as Opt
21import qualified AST.Optimized as Opt
23import qualified Data.Index as Index
22import qualified Data.Index as Index
24import qualified Elm.Interface as I
23import qualified Elm.Interface as I
24+import qualified Elm.Kernel as K
25import qualified Elm.ModuleName as ModuleName
25import qualified Elm.ModuleName as ModuleName
26import qualified Generate.JavaScript.Builder as JS
26import qualified Generate.JavaScript.Builder as JS
27import qualified Generate.JavaScript.Expression as Expr
27import qualified Generate.JavaScript.Expression as Expr
28import qualified Generate.JavaScript.Name as JsName
28import qualified Generate.JavaScript.Name as JsName
29import qualified Generate.JavaScript.Mode as Mode
29import qualified Generate.JavaScript.Mode as Mode
30−import qualified Reporting.Doc as D
31import qualified Reporting.Render.Type as RT
30import qualified Reporting.Render.Type as RT
32import qualified Reporting.Render.Type.Localizer as L
31import qualified Reporting.Render.Type.Localizer as L
@@ -192,16 +191,11 @@ addGlobalHelp mode graph global state =
192 Opt.Manager effectsType ->
191 Opt.Manager effectsType ->
193 generateManager mode graph global effectsType state
192 generateManager mode graph global effectsType state
195− Opt.Kernel (Opt.KContent clientChunks clientDeps) maybeServer ->
194+ Opt.Kernel chunks deps ->
196 if isDebugger global && not (Mode.isDebug mode) then
195 if isDebugger global && not (Mode.isDebug mode) then
200− Just (Opt.KContent serverChunks serverDeps) | Mode.isServer mode ->
201− addKernel (addDeps serverDeps state) (generateKernel mode serverChunks)
204− addKernel (addDeps clientDeps state) (generateKernel mode clientChunks)
198+ addKernel (addDeps deps state) (generateKernel mode chunks)
206 Opt.Enum index ->
200 Opt.Enum index ->
207 addStmt state (
201 addStmt state (
@@ -321,33 +315,33 @@ drawCycle names =
321-- GENERATE KERNEL
315-- GENERATE KERNEL
324−generateKernel :: Mode.Mode -> [Opt.KChunk] -> B.Builder
318+generateKernel :: Mode.Mode -> [K.Chunk] -> B.Builder
325generateKernel mode chunks =
319generateKernel mode chunks =
326− List.foldl' (addChunk mode) mempty chunks
320+ List.foldr (addChunk mode) mempty chunks
329−addChunk :: Mode.Mode -> B.Builder -> Opt.KChunk -> B.Builder
323+addChunk :: Mode.Mode -> K.Chunk -> B.Builder -> B.Builder
330−addChunk mode builder chunk =
324+addChunk mode chunk builder =
331 case chunk of
325 case chunk of
332− Opt.JS javascript ->
326+ K.JS javascript ->
333− B.byteString javascript <> builder
327+ Utf8.toBuilder javascript <> builder
335− Opt.ElmVar home name ->
329+ K.ElmVar home name ->
336 JsName.toBuilder (JsName.fromGlobal home name) <> builder
330 JsName.toBuilder (JsName.fromGlobal home name) <> builder
338− Opt.JsVar home name ->
332+ K.JsVar home name ->
339 JsName.toBuilder (JsName.fromKernel home name) <> builder
333 JsName.toBuilder (JsName.fromKernel home name) <> builder
341− Opt.ElmField name ->
335+ K.ElmField name ->
342 JsName.toBuilder (Expr.generateField mode name) <> builder
336 JsName.toBuilder (Expr.generateField mode name) <> builder
344− Opt.JsField int ->
338+ K.JsField int ->
345 JsName.toBuilder (JsName.fromInt int) <> builder
339 JsName.toBuilder (JsName.fromInt int) <> builder
347− Opt.JsEnum int ->
341+ K.JsEnum int ->
348 B.intDec int <> builder
342 B.intDec int <> builder
350− Opt.Debug ->
344+ K.Debug ->
351 case mode of
345 case mode of
352 Mode.Dev _ _ ->
346 Mode.Dev _ _ ->
@@ -355,7 +349,7 @@ addChunk mode builder chunk =
355 Mode.Prod _ _ ->
349 Mode.Prod _ _ ->
356 "_UNUSED" <> builder
350 "_UNUSED" <> builder
358− Opt.Prod ->
352+ K.Prod ->
359 case mode of
353 case mode of
360 Mode.Dev _ _ ->
354 Mode.Dev _ _ ->
361 "_UNUSED" <> builder
355 "_UNUSED" <> builder
@@ -520,14 +514,14 @@ generateExports mode (Trie maybeMain subs) =
521 (name, subTrie) : otherSubTries ->
515 (name, subTrie) : otherSubTries ->
522 starter "," <>
516 starter "," <>
523− "'" <> Text.encodeUtf8Builder name <> "':"
517+ "'" <> Utf8.toBuilder name <> "':"
524 <> generateExports mode subTrie
518 <> generateExports mode subTrie
525 <> List.foldl' (addSubTrie mode) "}" otherSubTries
519 <> List.foldl' (addSubTrie mode) "}" otherSubTries
528−addSubTrie :: Mode.Mode -> B.Builder -> (Text.Text, Trie) -> B.Builder
522+addSubTrie :: Mode.Mode -> B.Builder -> (Utf8.String, Trie) -> B.Builder
529addSubTrie mode end (name, trie) =
523addSubTrie mode end (name, trie) =
530− ",'" <> Text.encodeUtf8Builder name <> "':" <> generateExports mode trie <> end
524+ ",'" <> Utf8.toBuilder name <> "':" <> generateExports mode trie <> end
@@ -537,7 +531,7 @@ addSubTrie mode end (name, trie) =
537data Trie =
531data Trie =
539 { _main :: Maybe (ModuleName.Canonical, Opt.Main)
533 { _main :: Maybe (ModuleName.Canonical, Opt.Main)
540− , _subs :: Map.Map Text.Text Trie
534+ , _subs :: Map.Map Utf8.String Trie
@@ -548,10 +542,14 @@ emptyTrie =
549addToTrie :: ModuleName.Canonical -> Opt.Main -> Trie -> Trie
543addToTrie :: ModuleName.Canonical -> Opt.Main -> Trie -> Trie
550addToTrie home@(ModuleName.Canonical _ moduleName) main trie =
544addToTrie home@(ModuleName.Canonical _ moduleName) main trie =
547+ Utf8.split 0x2E {-.-} (Name.toUtf8 moduleName)
551− merge trie $ segmentsToTrie home (Text.splitOn "." (Name.toText moduleName)) main
549+ merge trie $ segmentsToTrie home segments main
554−segmentsToTrie :: ModuleName.Canonical -> [Text.Text] -> Opt.Main -> Trie
552+segmentsToTrie :: ModuleName.Canonical -> [Utf8.String] -> Opt.Main -> Trie
555segmentsToTrie home segments main =
553segmentsToTrie home segments main =
556 case segments of
554 case segments of