@@ -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)
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
@@ -33,10 +34,10 @@ import qualified Reporting.Annotation as A
33parser :: Parser Kernel.Content
34parser :: Parser Kernel.Content
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)
@@ -138,8 +139,8 @@ type Imports =
138 Map.Map Text (Module.Raw, Text)
139 Map.Map Text (Module.Raw, Text)
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) =
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 )
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)
155− fullName
156+ moduleName
157− toEntry value =
158+ toEntry name =
158− ( shortName <> "_" <> value, ( fullName, value ) )
159+ ( shortName <> "_" <> name, ( moduleName, name ) )
160 Map.fromList $ map toEntry $
161 Map.fromList $ map toEntry $
161− concatMap entryToValues $ getExplicits exposed
162+ case exposing of
164+ error "cannot have open imports in kernel code"
166+ Src.Explicit exposed ->
167+ map exposedToName exposed
164−getExplicits :: Exposing.Exposing a -> [a]
165−getExplicits exposed =
168− error "cannot have open imports in kernel code"
170− Exposing.Explicit entries ->
170+exposedToName :: A.Located Src.Exposed -> N.Name
171− map A.drop entries
171+exposedToName (A.A _ exposed) =
176+ Src.Upper name Src.Private ->
174−entryToValues :: Exposing.Entry -> [Text]
179+ Src.Upper _ Src.Public ->
175−entryToValues entry =
180+ error "cannot have Maybe(..) syntax in kernel code header"
177− Exposing.Lower name ->
180− Exposing.Upper name ctors ->
182+ Src.Operator _ ->
181− maybe [name] getExplicits ctors
183+ error "cannot use binops in kernel code"