on master help sign in
Change the Context passed into Elm.Compiler.compile

With the new builder stuff, it is easier to provide a map from raw names to canonical names. That’s what is needed eventually, so we can skip the intermediate structure. Also have the interfaces given in the Context, not as a separate argument.

commitd4cc828ba5c933e09cd2f8bc8f94992f98b9f79f authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 23 Feb 2017, 16:55 (10 years ago) parente8bc65e
3 files changed+19−24
src/Canonicalize.hs+2−9 src/Compile.hs+4−3 src/Elm/Compiler.hs+13−12
src/Canonicalize.hs+2−9
@@ -9,8 +9,6 @@ import qualified Data.Maybe as Maybe
99import qualified Data.Set as Set
1010import Data.Text (Text)
1111
12−import Elm.Utils ((|>))
13−
1412import qualified AST.Declaration as D
1513import qualified AST.Expression.Source as Src
1614import qualified AST.Expression.Canonical as C
@@ -46,20 +44,15 @@ type Result a =
4644
4745
4846module'
49− :: [ModuleName.Canonical]
47+ :: Map.Map ModuleName.Raw ModuleName.Canonical
5048 -> Module.Interfaces
5149 -> Module.Valid
5250 -> Result Module.Canonical
53−module' allCanonicalImports interfaces modul =
51+module' importDict interfaces modul =
5452 let
5553 (Module.Valid docs exports imports decls effects) =
5654 Module.info modul
5755
58− importDict =
59− allCanonicalImports
60− |> map (\cName -> (ModuleName._module cName, cName))
61− |> Map.fromList
62−
6356 (Result.Result uses warnings rawResults) =
6457 do env <- Setup.environment importDict interfaces modul
6558
src/Compile.hs+4−3
@@ -1,6 +1,7 @@
11{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
22module Compile (compile) where
33
4+import Data.Map (Map)
45import Data.Text (Text)
56
67import qualified AST.Expression.Canonical as Can
@@ -29,11 +30,11 @@ type Result =
2930
3031compile
3132 :: Package.Name
32− -> [ModuleName.Canonical]
33+ -> Map ModuleName.Raw ModuleName.Canonical
3334 -> Module.Interfaces
3435 -> Text
3536 -> Result Module.Optimized
36−compile packageName canonicalImports interfaces source =
37+compile packageName importDict interfaces source =
3738 do
3839 -- Parse the source code
3940 validModule <-
@@ -44,7 +45,7 @@ compile packageName canonicalImports interfaces source =
4445 -- Canonicalize all variables, pinning down where they came from.
4546 canonicalModule <-
4647 {-# SCC elm_compiler_canonicalize #-}
47− Canonicalize.module' canonicalImports interfaces validModule
48+ Canonicalize.module' importDict interfaces validModule
4849
4950 -- Run type inference on the program.
5051 types <-
src/Elm/Compiler.hs+13−12
@@ -20,7 +20,7 @@ import qualified AST.Module.Name as ModuleName
2020import qualified Compile
2121import qualified Docs.Check as Docs
2222import qualified Elm.Compiler.Imports as Imports
23−import qualified Elm.Compiler.Module as PublicModule
23+import qualified Elm.Compiler.Module as M
2424import qualified Elm.Compiler.Version
2525import qualified Elm.Docs as Docs
2626import qualified Elm.Package as Package
@@ -55,7 +55,7 @@ data Tag
5555 | Port
5656
5757
58−parseDependencies :: Maybe Package.Name -> Text -> Either Error (Tag, PublicModule.Raw, [PublicModule.Raw])
58+parseDependencies :: Maybe Package.Name -> Text -> Either Error (Tag, M.Raw, [M.Raw])
5959parseDependencies maybePkgName sourceCode =
6060 case Parse.run Parse.header sourceCode of
6161 Right header ->
@@ -65,7 +65,7 @@ parseDependencies maybePkgName sourceCode =
6565 Left (Error (A.map Error.Syntax err))
6666
6767
68−getDeps :: Maybe Package.Name -> Module.Header [Module.UserImport] -> (Tag, PublicModule.Raw, [PublicModule.Raw])
68+getDeps :: Maybe Package.Name -> Module.Header [Module.UserImport] -> (Tag, M.Raw, [M.Raw])
6969getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
7070 let
7171 tag =
@@ -88,15 +88,15 @@ getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
8888
8989
9090{-| Compiles Elm source code to JavaScript. -}
91−compile :: Context -> Text -> PublicModule.Interfaces -> (Localizer, [Warning], Either [Error] Result)
92−compile context source interfaces =
91+compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
92+compile context source =
9393 let
94− (Context packageName isExposed dependencies) =
94+ (Context packageName exposed importDict interfaces) =
9595 context
9696
9797 (Result.Result oneLocalizer warnings answer) =
98− do modul <- Compile.compile packageName dependencies interfaces source
99− docs <- Result.format id (docsGen isExposed modul)
98+ do modul <- Compile.compile packageName importDict interfaces source
99+ docs <- Result.format id (docsGen exposed modul)
100100
101101 let interface = Module.toInterface packageName modul
102102 let javascript = {-# SCC elm_compiler_generate #-} JS.generate modul
@@ -111,15 +111,16 @@ compile context source interfaces =
111111
112112data Context =
113113 Context
114− { _packageName :: Package.Name
115− , _isExposed :: Bool
116− , _dependencies :: [PublicModule.Canonical]
114+ { _package :: Package.Name
115+ , _exposed :: Bool
116+ , _imports :: Map.Map M.Raw M.Canonical
117+ , _interfaces :: M.Interfaces
117118 }
118119
119120
120121data Result = Result
121122 { _docs :: Maybe Docs.Documentation
122− , _interface :: PublicModule.Interface
123+ , _interface :: M.Interface
123124 , _js :: LazyText.Text
124125 }
125126