@@ -19,6 +19,7 @@ import qualified AST.Kernel as Kernel
19import qualified AST.Module as Module
19import qualified AST.Module as Module
20import qualified AST.Module.Name as Module
20import qualified AST.Module.Name as Module
21import Generate.JavaScript.Helpers as Help (toFieldName)
21import Generate.JavaScript.Helpers as Help (toFieldName)
22+import Generate.JavaScript.Variable as Var (intToAscii)
22import Parse.Helpers (Parser)
23import Parse.Helpers (Parser)
23import qualified Parse.Helpers as Parse
24import qualified Parse.Helpers as Parse
24import qualified Parse.Module as Parse
25import qualified Parse.Module as Parse
@@ -31,18 +32,14 @@ import qualified Reporting.Annotation as A
32parser :: Parser Kernel.Info
33parser :: Parser Kernel.Info
34− do imports <- Parse.kernelHeader
35+ do header <- Parse.kernelHeader
35− let table = Map.unions (map importToTable imports)
36+ let imports = Map.unions (map headerToImport header)
36− chunks <- parserHelp table Map.empty []
37+ chunks <- parserHelp imports Map.empty Map.empty []
37− return (Kernel.Info (Map.elems table) chunks)
38+ return (Kernel.Info (Map.elems imports) chunks)
41− Map.Map Word8 (Map.Map Text BS.ByteString)
44−parserHelp :: Table -> Enums -> [Kernel.Chunk] -> Parser [Kernel.Chunk]
41+parserHelp :: Imports -> Enums -> Fields -> [Kernel.Chunk] -> Parser [Kernel.Chunk]
45−parserHelp table enums chunks =
42+parserHelp imports enums fields chunks =
46 do (javascript, maybeTag) <- Parse.kernelChunk
43 do (javascript, maybeTag) <- Parse.kernelChunk
47 case maybeTag of
44 case maybeTag of
48 Nothing ->
45 Nothing ->
@@ -51,22 +48,62 @@ parserHelp table enums chunks =
51 Just tag ->
48 Just tag ->
52 case tag of
49 case tag of
53 Parse.KernelProd isProd ->
50 Parse.KernelProd isProd ->
54− parserHelp table enums (Kernel.Prod isProd : Kernel.JS javascript : chunks)
51+ parserHelp imports enums fields (Kernel.Prod isProd : Kernel.JS javascript : chunks)
56 Parse.KernelImport var ->
53 Parse.KernelImport var ->
57− case Map.lookup var table of
54+ case Map.lookup var imports of
58 Nothing ->
55 Nothing ->
59 error ("Bad kernel symbol: " ++ Text.unpack var)
56 error ("Bad kernel symbol: " ++ Text.unpack var)
61 Just (home, name) ->
58 Just (home, name) ->
62− parserHelp table enums (Kernel.Var home name : Kernel.JS javascript : chunks)
59+ parserHelp imports enums fields (Kernel.Var home name : Kernel.JS javascript : chunks)
64 Parse.KernelEnum n var ->
61 Parse.KernelEnum n var ->
66 (bytes, newEnums) =
63 (bytes, newEnums) =
67 lookupEnum n var enums
64 lookupEnum n var enums
66+ parserHelp imports newEnums fields (Kernel.JS bytes : Kernel.JS javascript : chunks)
68+ Parse.KernelElmField name ->
69+ parserHelp imports enums fields (Kernel.Field name : Kernel.JS javascript : chunks)
71+ Parse.KernelJsField name ->
74+ lookupField name fields
69− parserHelp table newEnums (Kernel.JS bytes : Kernel.JS javascript : chunks)
76+ parserHelp imports enums newFields (Kernel.JS bytes : Kernel.JS javascript : chunks)
84+ Map.Map Text BS.ByteString
87+lookupField :: Text -> Fields -> (BS.ByteString, Fields)
88+lookupField longName fields =
89+ case Map.lookup longName fields of
96+ Var.intToAscii (Map.size fields)
98+ ( shortName, Map.insert longName shortName fields )
106+ Map.Map Word8 (Map.Map Text BS.ByteString)
72lookupEnum :: Word8 -> Text -> Enums -> (BS.ByteString, Enums)
109lookupEnum :: Word8 -> Text -> Enums -> (BS.ByteString, Enums)
@@ -88,15 +125,15 @@ lookupEnum word var allEnums =
91−-- SYMBOL TABLE
128+-- IMPORTS
94−type Table =
131+type Imports =
95 Map.Map Text (Module.Raw, Text)
132 Map.Map Text (Module.Raw, Text)
98−importToTable :: Module.UserImport -> Table
135+headerToImport :: Module.UserImport -> Imports
99−importToTable (A.A _ ( A.A _ fullName, Module.ImportMethod maybeAlias exposed )) =
136+headerToImport (A.A _ ( A.A _ fullName, Module.ImportMethod maybeAlias exposed )) =
101 shortName =
138 shortName =
102 case maybeAlias of
139 case maybeAlias of