@@ -2,12 +2,10 @@
22module Elm.Compiler
33 ( version
44 , compile, Context(..), Result(..)
5− , generate
5+ , generate, JS.Target(..)
66 , Localizer, dummyLocalizer
7− , Error, errorToDoc, errorToJson
8− , Warning, warningToDoc, warningToJson
9− , Tag(..), parseHeader
10− , KernelInfo(..), parseKernel
7+ , I.Error, errorToDoc, errorToJson
8+ , I.Warning, warningToDoc, warningToJson
119 )
1210 where
1311
@@ -17,21 +15,17 @@ import Data.Text (Text)
1715import qualified Data.ByteString.Builder as BS
1816import Text.PrettyPrint.ANSI.Leijen (Doc)
1917
20−import qualified AST.Kernel as Kernel (Info)
2118import qualified AST.Module as Module
2219import qualified AST.Module.Name as ModuleName
2320import qualified Compile
2421import qualified Docs.Check as Docs
25−import qualified Elm.Compiler.Imports as Imports
22+import qualified Elm.Compiler.Internals as I
2623import qualified Elm.Compiler.Module as M
2724import qualified Elm.Compiler.Objects.Internal as Obj
2825import qualified Elm.Compiler.Version
2926import qualified Elm.Docs as Docs
3027import qualified Elm.Package as Package
3128import qualified Generate.JavaScript as JS
32−import qualified Parse.Helpers as Parse (run)
33−import qualified Parse.Kernel as Kernel (parser)
34−import qualified Parse.Module as Parse (header)
3529import qualified Reporting.Annotation as A
3630import qualified Reporting.Bag as Bag
3731import qualified Reporting.Error as Error
@@ -55,7 +49,7 @@ version =
5549
5650
5751{-| Compiles Elm source code to JavaScript. -}
58−compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
52+compile :: Context -> Text -> (Localizer, [I.Warning], Either [I.Error] Result)
5953compile (Context packageName exposed importDict interfaces) source =
6054 let
6155 (Result.Result oneLocalizer warnings answer) =
@@ -68,8 +62,8 @@ compile (Context packageName exposed importDict interfaces) source =
6862 return (Result docs iface objs)
6963 in
7064 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
71− , Bag.toList Warning warnings
72− , Result.answerToEither Error id answer
65+ , Bag.toList I.Warning warnings
66+ , Result.answerToEither I.Error id answer
7367 )
7468
7569
@@ -111,7 +105,7 @@ docsGen isExposed (Module.Module name info) =
111105-- CODE GENERATION
112106
113107
114−generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
108+generate :: Bool -> JS.Target -> Obj.Graph -> Obj.Roots -> BS.Builder
115109generate =
116110 JS.generate
117111
@@ -133,17 +127,13 @@ dummyLocalizer =
133127-- ERRORS
134128
135129
136−newtype Error =
137− Error (A.Located Error.Error)
138−
139−
140−errorToDoc :: Localizer -> String -> Text -> Error -> Doc
141−errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
130+errorToDoc :: Localizer -> String -> Text -> I.Error -> Doc
131+errorToDoc (Localizer localizer) location source (I.Error (A.A region err)) =
142132 Report.toDoc location region (Error.toReport localizer err) source
143133
144134
145−errorToJson :: Localizer -> String -> Error -> Json.Value
146−errorToJson (Localizer localizer) location (Error err) =
135+errorToJson :: Localizer -> String -> I.Error -> Json.Value
136+errorToJson (Localizer localizer) location (I.Error err) =
147137 Error.toJson localizer location err
148138
149139
@@ -151,73 +141,11 @@ errorToJson (Localizer localizer) location (Error err) =
151141-- WARNINGS
152142
153143
154−newtype Warning =
155− Warning (A.Located Warning.Warning)
156−
157−
158−warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
159−warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
144+warningToDoc :: Localizer -> String -> Text -> I.Warning -> Doc
145+warningToDoc (Localizer localizer) location source (I.Warning (A.A region wrn)) =
160146 Report.toDoc location region (Warning.toReport localizer wrn) source
161147
162148
163−warningToJson :: Localizer -> String -> Warning -> Json.Value
164−warningToJson (Localizer localizer) location (Warning wrn) =
149+warningToJson :: Localizer -> String -> I.Warning -> Json.Value
150+warningToJson (Localizer localizer) location (I.Warning wrn) =
165151 Warning.toJson localizer location wrn
166−
167−
168−
169−-- PARSE HEADER
170−
171−
172−data Tag = Normal | Effect | Port
173−
174−
175−parseHeader :: Package.Name -> Text -> Either Error (Maybe (Tag, M.Raw), [M.Raw])
176−parseHeader pkgName sourceCode =
177− case Parse.run Parse.header sourceCode of
178− Right header ->
179− Right $ toHeaderSummary pkgName header
180−
181− Left err ->
182− Left (Error (A.map Error.Syntax err))
183−
184−
185−toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
186−toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
187− let
188− dependencies =
189− if pkgName == Package.core
190− then map (A.drop . fst . A.drop) imports
191− else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
192− in
193− case maybeHeaderDecl of
194− Nothing ->
195− ( Nothing, dependencies )
196−
197− Just (Module.HeaderDecl sourceTag name _ _ _) ->
198− let
199− tag =
200− case sourceTag of
201− Module.Normal -> Normal
202− Module.Port _ -> Port
203− Module.Effect _ -> Effect
204− in
205− ( Just (tag, name), dependencies )
206−
207−
208−
209−-- PARSE KERNEL
210−
211−
212−newtype KernelInfo =
213− KernelInfo Kernel.Info
214−
215−
216−parseKernel :: Text -> Either Error KernelInfo
217−parseKernel sourceCode =
218− case Parse.run Kernel.parser sourceCode of
219− Right info ->
220− Right (KernelInfo info)
221−
222− Left err ->
223− Left (Error (A.map Error.Syntax err))