@@ -6,20 +6,16 @@ module Parse.Kernel
66 where
77
88
9−import qualified Data.ByteString as BS
109import qualified Data.Map as Map
1110import Data.Monoid ((<>))
1211import Data.Text (Text)
1312import qualified Data.Text as Text
14−import qualified Data.Text.Encoding as Text
1513import Data.Word (Word8)
1614
1715import qualified AST.Source as Src
1816import qualified AST.Utils.Kernel as Kernel
1917import qualified AST.Module.Name as ModuleName
2018import qualified Elm.Name as N
21−import Generate.JavaScript.Helpers as Help (toFieldName)
22−import Generate.JavaScript.Variable as Var (intToAscii)
2319import Parse.Primitives (Parser)
2420import qualified Parse.Primitives.Kernel as K
2521import qualified Parse.Primitives.Symbol as Symbol
@@ -52,10 +48,12 @@ parserHelp imports enums fields chunks =
5248 Just tag ->
5349 case tag of
5450 K.Prod ->
55− parserHelp imports enums fields (Kernel.Prod : Kernel.JS javascript : chunks)
51+ parserHelp imports enums fields $
52+ Kernel.Prod : Kernel.JS javascript : chunks
5653
5754 K.Debug ->
58− parserHelp imports enums fields (Kernel.Debug : Kernel.JS javascript : chunks)
55+ parserHelp imports enums fields $
56+ Kernel.Debug : Kernel.JS javascript : chunks
5957
6058 K.Import var ->
6159 case Map.lookup var imports of
@@ -63,24 +61,22 @@ parserHelp imports enums fields chunks =
6361 error ("Bad kernel symbol: " ++ Text.unpack var)
6462
6563 Just (home, name) ->
66− parserHelp imports enums fields (Kernel.Var home name : Kernel.JS javascript : chunks)
64+ parserHelp imports enums fields $
65+ Kernel.Var home name : Kernel.JS javascript : chunks
6766
6867 K.Enum n var ->
69− let
70− (bytes, newEnums) =
71− lookupEnum n var enums
72− in
73− parserHelp imports newEnums fields (Kernel.JS bytes : Kernel.JS javascript : chunks)
68+ let (enum, newEnums) = lookupEnum n var enums in
69+ parserHelp imports newEnums fields $
70+ Kernel.Enum enum : Kernel.JS javascript : chunks
7471
7572 K.ElmField name ->
76− parserHelp imports enums fields (Kernel.Field name : Kernel.JS javascript : chunks)
73+ parserHelp imports enums fields $
74+ Kernel.ElmField name : Kernel.JS javascript : chunks
7775
7876 K.JsField name ->
79− let
80− (bytes, newFields) =
81− lookupField name fields
82− in
83− parserHelp imports enums newFields (Kernel.JS bytes : Kernel.JS javascript : chunks)
77+ let (field, newFields) = lookupField name fields in
78+ parserHelp imports enums newFields $
79+ Kernel.JsField field : Kernel.JS javascript : chunks
8480
8581
8682
@@ -88,21 +84,18 @@ parserHelp imports enums fields chunks =
8884
8985
9086type Fields =
91− Map.Map Text BS.ByteString
87+ Map.Map Text Int
9288
9389
94−lookupField :: Text -> Fields -> (BS.ByteString, Fields)
95−lookupField longName fields =
96− case Map.lookup longName fields of
97− Just bytes ->
98− ( bytes, fields )
90+lookupField :: Text -> Fields -> (Int, Fields)
91+lookupField name fields =
92+ case Map.lookup name fields of
93+ Just n ->
94+ ( n, fields )
9995
10096 Nothing ->
101− let
102− shortName =
103− Var.intToAscii (Map.size fields)
104− in
105− ( shortName, Map.insert longName shortName fields )
97+ let n = Map.size fields in
98+ ( n, Map.insert name n fields )
10699
107100
108101
@@ -110,25 +103,22 @@ lookupField longName fields =
110103
111104
112105type Enums =
113− Map.Map Word8 (Map.Map Text BS.ByteString)
106+ Map.Map Word8 (Map.Map N.Name Int)
114107
115108
116−lookupEnum :: Word8 -> Text -> Enums -> (BS.ByteString, Enums)
109+lookupEnum :: Word8 -> N.Name -> Enums -> (Int, Enums)
117110lookupEnum word var allEnums =
118111 let
119112 enums =
120113 Map.findWithDefault Map.empty word allEnums
121114 in
122115 case Map.lookup var enums of
123− Just bytes ->
124− ( bytes, allEnums )
116+ Just n ->
117+ ( n, allEnums )
125118
126119 Nothing ->
127− let
128− identifier =
129− Text.encodeUtf8 ("'" <> Help.toFieldName (Map.size enums) <> "'")
130− in
131− ( identifier, Map.insert word (Map.insert var identifier enums) allEnums )
120+ let n = Map.size enums in
121+ ( n, Map.insert word (Map.insert var n enums) allEnums )
132122
133123
134124