on master help sign in
Get Parse.Kernel compiling again
38bfa1bEvan Czaplicki
src/Parse/Kernel.hs+31−29
@@ -14,14 +14,15 @@ import qualified Data.Text as Text
14import qualified Data.Text.Encoding as Text
14import qualified Data.Text.Encoding as Text
15import Data.Word (Word8)
15import Data.Word (Word8)
16
16
17−import qualified AST.Exposing as Exposing
17+import qualified AST.Expression.Source as Src
18import qualified AST.Kernel as Kernel
18import qualified AST.Kernel as Kernel
19−import qualified AST.Module as Module
20import qualified AST.Module.Name as Module
19import qualified AST.Module.Name as Module
20+import qualified Elm.Name as N
21import Generate.JavaScript.Helpers as Help (toFieldName)
21import Generate.JavaScript.Helpers as Help (toFieldName)
22import Generate.JavaScript.Variable as Var (intToAscii)
22import Generate.JavaScript.Variable as Var (intToAscii)
23import Parse.Primitives (Parser)
23import Parse.Primitives (Parser)
24import qualified Parse.Primitives.Kernel as K
24import qualified Parse.Primitives.Kernel as K
25+import qualified Parse.Primitives.Symbol as Symbol
25import qualified Parse.Module as Module
26import qualified Parse.Module as Module
26import qualified Reporting.Annotation as A
27import qualified Reporting.Annotation as A
27
28
@@ -33,10 +34,10 @@ import qualified Reporting.Annotation as A
33parser :: Parser Kernel.Content
34parser :: Parser Kernel.Content
34parser =
35parser =
35 do Symbol.jsMultiCommentOpen
36 do Symbol.jsMultiCommentOpen
36− freshLine
37+ Module.freshLine
37− rawImports <- chompImports []
38+ srcImports <- Module.chompImports []
38 Symbol.jsMultiCommentClose
39 Symbol.jsMultiCommentClose
39− let imports = Map.unions (map destructImport rawImports)
40+ let imports = Map.unions (map destructImport srcImports)
40 chunks <- parserHelp imports Map.empty Map.empty []
41 chunks <- parserHelp imports Map.empty Map.empty []
41 return (Kernel.Content (Map.elems imports) chunks)
42 return (Kernel.Content (Map.elems imports) chunks)
42
43
@@ -138,8 +139,8 @@ type Imports =
138 Map.Map Text (Module.Raw, Text)
139 Map.Map Text (Module.Raw, Text)
139
140
140
141
141−destructImport :: Import.ByUser -> Imports
142+destructImport :: Src.Import -> Imports
142−destructImport (A.A _ ( A.A _ fullName, Module.ImportMethod maybeAlias exposed )) =
143+destructImport (Src.Import (A.A _ moduleName) maybeAlias exposing) =
143 let
144 let
144 shortName =
145 shortName =
145 case maybeAlias of
146 case maybeAlias of
@@ -147,35 +148,36 @@ destructImport (A.A _ ( A.A _ fullName, Module.ImportMethod maybeAlias exposed )
147 alias
148 alias
148
149
149 Nothing ->
150 Nothing ->
150− if Module.isKernel fullName then
151+ if Module.isKernel moduleName then
151− Module.getKernel fullName
152+ Module.getKernel moduleName
152− else if Text.isInfixOf "." fullName then
153+ else if Text.isInfixOf "." moduleName then
153− error ("modules with dots in kernel code need an alias: " ++ show fullName)
154+ error ("modules with dots in kernel code need an alias: " ++ show moduleName)
154 else
155 else
155− fullName
156+ moduleName
156
157
157− toEntry value =
158+ toEntry name =
158− ( shortName <> "_" <> value, ( fullName, value ) )
159+ ( shortName <> "_" <> name, ( moduleName, name ) )
159 in
160 in
160 Map.fromList $ map toEntry $
161 Map.fromList $ map toEntry $
161− concatMap entryToValues $ getExplicits exposed
162+ case exposing of
163+ Src.Open ->
164+ error "cannot have open imports in kernel code"
162
165
166+ Src.Explicit exposed ->
167+ map exposedToName exposed
163
168
164−getExplicits :: Exposing.Exposing a -> [a]
165−getExplicits exposed =
166− case exposed of
167− Exposing.Open ->
168− error "cannot have open imports in kernel code"
169
169
170− Exposing.Explicit entries ->
170+exposedToName :: A.Located Src.Exposed -> N.Name
171− map A.drop entries
171+exposedToName (A.A _ exposed) =
172+ case exposed of
173+ Src.Lower name ->
174+ name
172
175
176+ Src.Upper name Src.Private ->
177+ name
173
178
174−entryToValues :: Exposing.Entry -> [Text]
179+ Src.Upper _ Src.Public ->
175−entryToValues entry =
180+ error "cannot have Maybe(..) syntax in kernel code header"
176− case entry of
177− Exposing.Lower name ->
178− [name]
179
181
180− Exposing.Upper name ctors ->
182+ Src.Operator _ ->
181− maybe [name] getExplicits ctors
183+ error "cannot use binops in kernel code"
src/Parse/Module.hs+1
@@ -3,6 +3,7 @@
3module Parse.Module
3module Parse.Module
4 ( module_
4 ( module_
5 , chompImports
5 , chompImports
6+ , freshLine
6 )
7 )
7 where
8 where
8
9