on master help sign in
Switch Generate/* off Data.Text and update for data structure changes
commit628904c8f328aa6ec4ef13c457390ebbe5a0ef49 authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 27 Dec 2018, 11:55 (8 years ago) parentc6f4887
4 files changed+45−47
compiler/src/Generate/JavaScript.hs+27−29 compiler/src/Generate/JavaScript/Builder.hs+3−3 compiler/src/Generate/JavaScript/Expression.hs+12−13 compiler/src/Generate/JavaScript/Name.hs+3−2
compiler/src/Generate/JavaScript.hs+27−29
@@ -15,19 +15,18 @@ import Data.Map ((!))
1515import qualified Data.Map as Map
1616import qualified Data.Name as Name
1717import qualified Data.Set as Set
18−import qualified Data.Text as Text
19−import qualified Data.Text.Encoding as Text
18+import qualified Data.Utf8 as Utf8
2019
2120import qualified AST.Canonical as Can
2221import qualified AST.Optimized as Opt
2322import qualified Data.Index as Index
2423import qualified Elm.Interface as I
24+import qualified Elm.Kernel as K
2525import qualified Elm.ModuleName as ModuleName
2626import qualified Generate.JavaScript.Builder as JS
2727import qualified Generate.JavaScript.Expression as Expr
2828import qualified Generate.JavaScript.Name as JsName
2929import qualified Generate.JavaScript.Mode as Mode
30−import qualified Reporting.Doc as D
3130import qualified Reporting.Render.Type as RT
3231import qualified Reporting.Render.Type.Localizer as L
3332
@@ -192,16 +191,11 @@ addGlobalHelp mode graph global state =
192191 Opt.Manager effectsType ->
193192 generateManager mode graph global effectsType state
194193
195− Opt.Kernel (Opt.KContent clientChunks clientDeps) maybeServer ->
194+ Opt.Kernel chunks deps ->
196195 if isDebugger global && not (Mode.isDebug mode) then
197196 state
198197 else
199− case maybeServer of
200− Just (Opt.KContent serverChunks serverDeps) | Mode.isServer mode ->
201− addKernel (addDeps serverDeps state) (generateKernel mode serverChunks)
202−
203− _ ->
204− addKernel (addDeps clientDeps state) (generateKernel mode clientChunks)
198+ addKernel (addDeps deps state) (generateKernel mode chunks)
205199
206200 Opt.Enum index ->
207201 addStmt state (
@@ -321,33 +315,33 @@ drawCycle names =
321315-- GENERATE KERNEL
322316
323317
324−generateKernel :: Mode.Mode -> [Opt.KChunk] -> B.Builder
318+generateKernel :: Mode.Mode -> [K.Chunk] -> B.Builder
325319generateKernel mode chunks =
326− List.foldl' (addChunk mode) mempty chunks
320+ List.foldr (addChunk mode) mempty chunks
327321
328322
329−addChunk :: Mode.Mode -> B.Builder -> Opt.KChunk -> B.Builder
330−addChunk mode builder chunk =
323+addChunk :: Mode.Mode -> K.Chunk -> B.Builder -> B.Builder
324+addChunk mode chunk builder =
331325 case chunk of
332− Opt.JS javascript ->
333− B.byteString javascript <> builder
326+ K.JS javascript ->
327+ Utf8.toBuilder javascript <> builder
334328
335− Opt.ElmVar home name ->
329+ K.ElmVar home name ->
336330 JsName.toBuilder (JsName.fromGlobal home name) <> builder
337331
338− Opt.JsVar home name ->
332+ K.JsVar home name ->
339333 JsName.toBuilder (JsName.fromKernel home name) <> builder
340334
341− Opt.ElmField name ->
335+ K.ElmField name ->
342336 JsName.toBuilder (Expr.generateField mode name) <> builder
343337
344− Opt.JsField int ->
338+ K.JsField int ->
345339 JsName.toBuilder (JsName.fromInt int) <> builder
346340
347− Opt.JsEnum int ->
341+ K.JsEnum int ->
348342 B.intDec int <> builder
349343
350− Opt.Debug ->
344+ K.Debug ->
351345 case mode of
352346 Mode.Dev _ _ ->
353347 builder
@@ -355,7 +349,7 @@ addChunk mode builder chunk =
355349 Mode.Prod _ _ ->
356350 "_UNUSED" <> builder
357351
358− Opt.Prod ->
352+ K.Prod ->
359353 case mode of
360354 Mode.Dev _ _ ->
361355 "_UNUSED" <> builder
@@ -520,14 +514,14 @@ generateExports mode (Trie maybeMain subs) =
520514
521515 (name, subTrie) : otherSubTries ->
522516 starter "," <>
523− "'" <> Text.encodeUtf8Builder name <> "':"
517+ "'" <> Utf8.toBuilder name <> "':"
524518 <> generateExports mode subTrie
525519 <> List.foldl' (addSubTrie mode) "}" otherSubTries
526520
527521
528−addSubTrie :: Mode.Mode -> B.Builder -> (Text.Text, Trie) -> B.Builder
522+addSubTrie :: Mode.Mode -> B.Builder -> (Utf8.String, Trie) -> B.Builder
529523addSubTrie mode end (name, trie) =
530− ",'" <> Text.encodeUtf8Builder name <> "':" <> generateExports mode trie <> end
524+ ",'" <> Utf8.toBuilder name <> "':" <> generateExports mode trie <> end
531525
532526
533527
@@ -537,7 +531,7 @@ addSubTrie mode end (name, trie) =
537531data Trie =
538532 Trie
539533 { _main :: Maybe (ModuleName.Canonical, Opt.Main)
540− , _subs :: Map.Map Text.Text Trie
534+ , _subs :: Map.Map Utf8.String Trie
541535 }
542536
543537
@@ -548,10 +542,14 @@ emptyTrie =
548542
549543addToTrie :: ModuleName.Canonical -> Opt.Main -> Trie -> Trie
550544addToTrie home@(ModuleName.Canonical _ moduleName) main trie =
551− merge trie $ segmentsToTrie home (Text.splitOn "." (Name.toText moduleName)) main
545+ let
546+ segments =
547+ Utf8.split 0x2E {-.-} (Name.toUtf8 moduleName)
548+ in
549+ merge trie $ segmentsToTrie home segments main
552550
553551
554−segmentsToTrie :: ModuleName.Canonical -> [Text.Text] -> Opt.Main -> Trie
552+segmentsToTrie :: ModuleName.Canonical -> [Utf8.String] -> Opt.Main -> Trie
555553segmentsToTrie home segments main =
556554 case segments of
557555 [] ->
compiler/src/Generate/JavaScript/Builder.hs+3−3
@@ -29,7 +29,7 @@ import qualified Json.Encode as Json
2929
3030data Expr
3131 = String Builder
32− | Float Double
32+ | Float Builder
3333 | Int Int
3434 | Bool Bool
3535 | Null
@@ -316,8 +316,8 @@ fromExpr indent grouping expression =
316316 String string ->
317317 (One, "'" <> string <> "'")
318318
319− Float n ->
320− (One, B.doubleDec n)
319+ Float float ->
320+ (One, float)
321321
322322 Int n ->
323323 (One, B.intDec n)
compiler/src/Generate/JavaScript/Expression.hs+12−13
@@ -18,7 +18,6 @@ import Data.Map ((!))
1818import qualified Data.Map as Map
1919import qualified Data.Name as Name
2020import qualified Data.Set as Set
21−import qualified Data.Text.Encoding as Text
2221import qualified Data.Utf8 as Utf8
2322
2423import qualified AST.Canonical as Can
@@ -26,7 +25,7 @@ import qualified AST.Optimized as Opt
2625import qualified Data.Index as Index
2726import qualified Elm.Compiler.Type as Type
2827import qualified Elm.Compiler.Type.Extract as Extract
29−import qualified Elm.Compiler.Version as Version
28+import qualified Elm.Version as V
3029import qualified Elm.ModuleName as ModuleName
3130import qualified Elm.Package as Pkg
3231import qualified Generate.JavaScript.Builder as JS
@@ -34,7 +33,7 @@ import qualified Generate.JavaScript.Mode as Mode
3433import qualified Generate.JavaScript.Name as JsName
3534import qualified Json.Encode as Encode
3635import qualified Optimize.DecisionTree as DT
37−import qualified Reporting.Region as R
36+import qualified Reporting.Annotation as A
3837
3938
4039
@@ -68,7 +67,7 @@ generate mode expression =
6867 JsExpr $ JS.Int int
6968
7069 Opt.Float float ->
71− JsExpr $ JS.Float float
70+ JsExpr $ JS.Float (Utf8.toBuilder float)
7271
7372 Opt.VarLocal name ->
7473 JsExpr $ JS.Ref (JsName.fromLocal name)
@@ -191,7 +190,7 @@ generate mode expression =
191190 JS.Object (map toTranlation (Set.toList fields))
192191 in
193192 JsExpr $ JS.Object $
194− [ ( JsName.fromLocal "src", JS.String (Text.encodeUtf8Builder src) )
193+ [ ( JsName.fromLocal "src", JS.String (Utf8.toBuilder src) )
195194 , ( JsName.fromLocal "attributes", toTranslationObject attributes )
196195 , ( JsName.fromLocal "uniforms", toTranslationObject uniforms )
197196 ]
@@ -313,7 +312,7 @@ generateField mode name =
313312-- DEBUG
314313
315314
316−generateDebug :: Name.Name -> ModuleName.Canonical -> R.Region -> Maybe Name.Name -> JS.Expr
315+generateDebug :: Name.Name -> ModuleName.Canonical -> A.Region -> Maybe Name.Name -> JS.Expr
317316generateDebug name (ModuleName.Canonical _ home) region unhandledValueName =
318317 if name /= "todo" then
319318 JS.Ref (JsName.fromGlobal ModuleName.debug name)
@@ -333,19 +332,19 @@ generateDebug name (ModuleName.Canonical _ home) region unhandledValueName =
333332 ]
334333
335334
336−regionToJsExpr :: R.Region -> JS.Expr
337−regionToJsExpr (R.Region start end) =
335+regionToJsExpr :: A.Region -> JS.Expr
336+regionToJsExpr (A.Region start end) =
338337 JS.Object
339338 [ ( JsName.fromLocal "start", positionToJsExpr start )
340339 , ( JsName.fromLocal "end", positionToJsExpr end )
341340 ]
342341
343342
344−positionToJsExpr :: R.Position -> JS.Expr
345−positionToJsExpr (R.Position line column) =
343+positionToJsExpr :: A.Position -> JS.Expr
344+positionToJsExpr (A.Position line column) =
346345 JS.Object
347− [ ( JsName.fromLocal "line", JS.Int line )
348− , ( JsName.fromLocal "column", JS.Int column )
346+ [ ( JsName.fromLocal "line", JS.Int (fromIntegral line) )
347+ , ( JsName.fromLocal "column", JS.Int (fromIntegral column) )
349348 ]
350349
351350
@@ -1065,6 +1064,6 @@ toDebugMetadata mode msgType =
10651064
10661065 Mode.Dev _ (Just interfaces) ->
10671066 JS.Json $ Encode.object $
1068− [ ("versions", Encode.object [ ("elm", Pkg.encodeVersion Version.version) ])
1067+ [ ("versions", Encode.object [ ("elm", V.encode V.compiler) ])
10691068 , ("types", Type.encodeMetadata (Extract.fromMsg interfaces msgType))
10701069 ]
compiler/src/Generate/JavaScript/Name.hs+3−2
@@ -23,6 +23,7 @@ import Data.Monoid ((<>))
2323import qualified Data.Map as Map
2424import qualified Data.Name as Name
2525import qualified Data.Set as Set
26+import qualified Data.Utf8 as Utf8
2627import Data.Word (Word8)
2728
2829import qualified Data.Index as Index
@@ -231,7 +232,7 @@ allBadFields :: [BadFields]
231232allBadFields =
232233 let
233234 add keyword dict =
234− Map.alter (Just . addRenaming keyword) (Name.length keyword) dict
235+ Map.alter (Just . addRenaming keyword) (Utf8.size keyword) dict
235236 in
236237 Map.elems $ Set.foldr add Map.empty jsReservedWords
237238
@@ -239,7 +240,7 @@ allBadFields =
239240addRenaming :: Name.Name -> Maybe BadFields -> BadFields
240241addRenaming keyword maybeBadFields =
241242 let
242− width = Name.length keyword
243+ width = Utf8.size keyword
243244 maxName = numStartBytes * numInnerBytes ^ (width - 1) - 1
244245 in
245246 case maybeBadFields of