on master help sign in
Switch Elm.Kernel over to Data.Name
1bb5a3eEvan Czaplicki
compiler/src/Elm/Kernel.hs+21−21
@@ -10,6 +10,7 @@ module Elm.Kernel
10import qualified Data.ByteString as B
10import qualified Data.ByteString as B
11import qualified Data.List as List
11import qualified Data.List as List
12import qualified Data.Map as Map
12import qualified Data.Map as Map
13+import qualified Data.Name as Name
13import qualified Data.Set as Set
14import qualified Data.Set as Set
14import Data.Word (Word8)
15import Data.Word (Word8)
15
16
@@ -17,7 +18,6 @@ import Data.Word (Word8)
17import qualified AST.Optimized as Opt
18import qualified AST.Optimized as Opt
18import qualified AST.Source as Src
19import qualified AST.Source as Src
19import qualified AST.Module.Name as ModuleName
20import qualified AST.Module.Name as ModuleName
20−import qualified Elm.Name as N
21import qualified Elm.Package as Pkg
21import qualified Elm.Package as Pkg
22import Parse.Primitives (Parser, run)
22import Parse.Primitives (Parser, run)
23import qualified Parse.Primitives.Kernel as K
23import qualified Parse.Primitives.Kernel as K
@@ -32,7 +32,7 @@ import qualified Reporting.Error as E
32
32
33
33
34type ImportDict =
34type ImportDict =
35− Map.Map N.Name [Pkg.Name]
35+ Map.Map Name.Name [Pkg.Name]
36
36
37
37
38parse :: ImportDict -> B.ByteString -> Either E.Error Opt.KContent
38parse :: ImportDict -> B.ByteString -> Either E.Error Opt.KContent
@@ -64,7 +64,7 @@ parser importDict =
64
64
65
65
66type VarTable =
66type VarTable =
67− Map.Map N.Name Opt.KChunk
67+ Map.Map Name.Name Opt.KChunk
68
68
69
69
70data State =
70data State =
@@ -78,13 +78,13 @@ processImports importDict imports =
78
78
79addImport :: ImportDict -> State -> Src.Import -> State
79addImport :: ImportDict -> State -> Src.Import -> State
80addImport importDict state (Src.Import (A.At _ home) maybeAlias exposing) =
80addImport importDict state (Src.Import (A.At _ home) maybeAlias exposing) =
81− if ModuleName.isKernel home then
81+ if Name.isKernel home then
82 case maybeAlias of
82 case maybeAlias of
83 Just _ ->
83 Just _ ->
84− error ("Cannot use aliases on kernel import of: " ++ N.toString home)
84+ error ("Cannot use aliases on kernel import of: " ++ Name.toString home)
85
85
86 Nothing ->
86 Nothing ->
87− addKernelImport (ModuleName.getKernel home) exposing state
87+ addKernelImport (Name.getKernel home) exposing state
88
88
89 else
89 else
90 case Map.lookup home importDict of
90 case Map.lookup home importDict of
@@ -96,46 +96,46 @@ addImport importDict state (Src.Import (A.At _ home) maybeAlias exposing) =
96 addNormalImport canonicalHome prefix exposing state
96 addNormalImport canonicalHome prefix exposing state
97
97
98 _ ->
98 _ ->
99− error ("Cannot find kernel import of: " ++ N.toString home)
99+ error ("Cannot find kernel import of: " ++ Name.toString home)
100
100
101
101
102-- INVARIANT: the `home` is the * in `Elm.Kernel.*`
102-- INVARIANT: the `home` is the * in `Elm.Kernel.*`
103--
103--
104−addKernelImport :: N.Name -> Src.Exposing -> State -> State
104+addKernelImport :: Name.Name -> Src.Exposing -> State -> State
105addKernelImport home exposing (State vtable deps) =
105addKernelImport home exposing (State vtable deps) =
106 let
106 let
107 addVar table name =
107 addVar table name =
108− Map.insert (N.sepBy 0x5F {- _ -} home name) (Opt.JsVar home name) table
108+ Map.insert (Name.sepBy 0x5F {- _ -} home name) (Opt.JsVar home name) table
109 in
109 in
110 State
110 State
111 (List.foldl' addVar vtable (toNames exposing))
111 (List.foldl' addVar vtable (toNames exposing))
112 (Set.insert (Opt.kernel home) deps)
112 (Set.insert (Opt.kernel home) deps)
113
113
114
114
115−addNormalImport :: ModuleName.Canonical -> N.Name -> Src.Exposing -> State -> State
115+addNormalImport :: ModuleName.Canonical -> Name.Name -> Src.Exposing -> State -> State
116addNormalImport home prefix exposing state =
116addNormalImport home prefix exposing state =
117 let
117 let
118 addVar (State vtable deps) name =
118 addVar (State vtable deps) name =
119 State
119 State
120− (Map.insert (N.sepBy 0x5F {- _ -} prefix name) (Opt.ElmVar home name) vtable)
120+ (Map.insert (Name.sepBy 0x5F {- _ -} prefix name) (Opt.ElmVar home name) vtable)
121 (Set.insert (Opt.Global home name) deps)
121 (Set.insert (Opt.Global home name) deps)
122 in
122 in
123 List.foldl' addVar state (toNames exposing)
123 List.foldl' addVar state (toNames exposing)
124
124
125
125
126−toPrefix :: N.Name -> Maybe N.Name -> N.Name
126+toPrefix :: Name.Name -> Maybe Name.Name -> Name.Name
127toPrefix home maybeAlias =
127toPrefix home maybeAlias =
128 case maybeAlias of
128 case maybeAlias of
129 Just alias ->
129 Just alias ->
130 alias
130 alias
131
131
132 Nothing ->
132 Nothing ->
133− if N.contains 0x2E {- . -} home then
133+ if Name.hasDot home then
134− error ("kernel imports with dots need an alias: " ++ show (N.toString home))
134+ error ("kernel imports with dots need an alias: " ++ show (Name.toString home))
135 else
135 else
136 home
136 home
137
137
138−toNames :: Src.Exposing -> [N.Name]
138+toNames :: Src.Exposing -> [Name.Name]
139toNames exposing =
139toNames exposing =
140 case exposing of
140 case exposing of
141 Src.Open ->
141 Src.Open ->
@@ -145,7 +145,7 @@ toNames exposing =
145 map toName exposedList
145 map toName exposedList
146
146
147
147
148−toName :: A.Located Src.Exposed -> N.Name
148+toName :: A.Located Src.Exposed -> Name.Name
149toName (A.At _ exposed) =
149toName (A.At _ exposed) =
150 case exposed of
150 case exposed of
151 Src.Lower name ->
151 Src.Lower name ->
@@ -185,7 +185,7 @@ chompChunks vtable enums fields chunks =
185 K.Import var ->
185 K.Import var ->
186 case Map.lookup var vtable of
186 case Map.lookup var vtable of
187 Nothing ->
187 Nothing ->
188− error ("Bad kernel symbol: " ++ N.toString var)
188+ error ("Bad kernel symbol: " ++ Name.toString var)
189
189
190 Just chunk ->
190 Just chunk ->
191 chompChunks vtable enums fields $
191 chompChunks vtable enums fields $
@@ -211,10 +211,10 @@ chompChunks vtable enums fields chunks =
211
211
212
212
213type Fields =
213type Fields =
214− Map.Map N.Name Int
214+ Map.Map Name.Name Int
215
215
216
216
217−lookupField :: N.Name -> Fields -> (Int, Fields)
217+lookupField :: Name.Name -> Fields -> (Int, Fields)
218lookupField name fields =
218lookupField name fields =
219 case Map.lookup name fields of
219 case Map.lookup name fields of
220 Just n ->
220 Just n ->
@@ -230,10 +230,10 @@ lookupField name fields =
230
230
231
231
232type Enums =
232type Enums =
233− Map.Map Word8 (Map.Map N.Name Int)
233+ Map.Map Word8 (Map.Map Name.Name Int)
234
234
235
235
236−lookupEnum :: Word8 -> N.Name -> Enums -> (Int, Enums)
236+lookupEnum :: Word8 -> Name.Name -> Enums -> (Int, Enums)
237lookupEnum word var allEnums =
237lookupEnum word var allEnums =
238 let
238 let
239 enums =
239 enums =