@@ -6,20 +6,16 @@ module Parse.Kernel
9−import qualified Data.ByteString as BS
10import qualified Data.Map as Map
9import qualified Data.Map as Map
11import Data.Monoid ((<>))
10import Data.Monoid ((<>))
12import Data.Text (Text)
11import Data.Text (Text)
13import qualified Data.Text as Text
12import qualified Data.Text as Text
14−import qualified Data.Text.Encoding as Text
15import Data.Word (Word8)
13import Data.Word (Word8)
17import qualified AST.Source as Src
15import qualified AST.Source as Src
18import qualified AST.Utils.Kernel as Kernel
16import qualified AST.Utils.Kernel as Kernel
19import qualified AST.Module.Name as ModuleName
17import qualified AST.Module.Name as ModuleName
20import qualified Elm.Name as N
18import qualified Elm.Name as N
21−import Generate.JavaScript.Helpers as Help (toFieldName)
22−import Generate.JavaScript.Variable as Var (intToAscii)
23import Parse.Primitives (Parser)
19import Parse.Primitives (Parser)
24import qualified Parse.Primitives.Kernel as K
20import qualified Parse.Primitives.Kernel as K
25import qualified Parse.Primitives.Symbol as Symbol
21import qualified Parse.Primitives.Symbol as Symbol
@@ -52,10 +48,12 @@ parserHelp imports enums fields chunks =
52 Just tag ->
48 Just tag ->
53 case tag of
49 case tag of
51+ parserHelp imports enums fields $
55− parserHelp imports enums fields (Kernel.Prod : Kernel.JS javascript : chunks)
52+ Kernel.Prod : Kernel.JS javascript : chunks
57 K.Debug ->
54 K.Debug ->
55+ parserHelp imports enums fields $
58− parserHelp imports enums fields (Kernel.Debug : Kernel.JS javascript : chunks)
56+ Kernel.Debug : Kernel.JS javascript : chunks
60 K.Import var ->
58 K.Import var ->
61 case Map.lookup var imports of
59 case Map.lookup var imports of
@@ -63,24 +61,22 @@ parserHelp imports enums fields chunks =
63 error ("Bad kernel symbol: " ++ Text.unpack var)
61 error ("Bad kernel symbol: " ++ Text.unpack var)
65 Just (home, name) ->
63 Just (home, name) ->
64+ parserHelp imports enums fields $
66− parserHelp imports enums fields (Kernel.Var home name : Kernel.JS javascript : chunks)
65+ Kernel.Var home name : Kernel.JS javascript : chunks
68 K.Enum n var ->
67 K.Enum n var ->
71− lookupEnum n var enums
68+ let (enum, newEnums) = lookupEnum n var enums in
73− parserHelp imports newEnums fields (Kernel.JS bytes : Kernel.JS javascript : chunks)
69+ parserHelp imports newEnums fields $
70+ Kernel.Enum enum : Kernel.JS javascript : chunks
75 K.ElmField name ->
72 K.ElmField name ->
73+ parserHelp imports enums fields $
76− parserHelp imports enums fields (Kernel.Field name : Kernel.JS javascript : chunks)
74+ Kernel.ElmField name : Kernel.JS javascript : chunks
78 K.JsField name ->
76 K.JsField name ->
81− lookupField name fields
77+ let (field, newFields) = lookupField name fields in
83− parserHelp imports enums newFields (Kernel.JS bytes : Kernel.JS javascript : chunks)
78+ parserHelp imports enums newFields $
79+ Kernel.JsField field : Kernel.JS javascript : chunks
@@ -88,21 +84,18 @@ parserHelp imports enums fields chunks =
90type Fields =
86type Fields =
91− Map.Map Text BS.ByteString
87+ Map.Map Text Int
94−lookupField :: Text -> Fields -> (BS.ByteString, Fields)
90+lookupField :: Text -> Fields -> (Int, Fields)
95−lookupField longName fields =
91+lookupField name fields =
96− case Map.lookup longName fields of
92+ case Map.lookup name fields of
97− Just bytes ->
93+ Just n ->
98− ( bytes, fields )
94+ ( n, fields )
100 Nothing ->
96 Nothing ->
103− Var.intToAscii (Map.size fields)
97+ let n = Map.size fields in
105− ( shortName, Map.insert longName shortName fields )
98+ ( n, Map.insert name n fields )
@@ -110,25 +103,22 @@ lookupField longName fields =
112type Enums =
105type Enums =
113− Map.Map Word8 (Map.Map Text BS.ByteString)
106+ Map.Map Word8 (Map.Map N.Name Int)
116−lookupEnum :: Word8 -> Text -> Enums -> (BS.ByteString, Enums)
109+lookupEnum :: Word8 -> N.Name -> Enums -> (Int, Enums)
117lookupEnum word var allEnums =
110lookupEnum word var allEnums =
120 Map.findWithDefault Map.empty word allEnums
113 Map.findWithDefault Map.empty word allEnums
122 case Map.lookup var enums of
115 case Map.lookup var enums of
123− Just bytes ->
116+ Just n ->
124− ( bytes, allEnums )
117+ ( n, allEnums )
126 Nothing ->
119 Nothing ->
129− Text.encodeUtf8 ("'" <> Help.toFieldName (Map.size enums) <> "'")
120+ let n = Map.size enums in
131− ( identifier, Map.insert word (Map.insert var identifier enums) allEnums )
121+ ( n, Map.insert word (Map.insert var n enums) allEnums )