on master help sign in
Change the Context passed into Elm.Compiler.compile
d4cc828Evan Czaplicki
src/Canonicalize.hs+2−9
@@ -9,8 +9,6 @@ import qualified Data.Maybe as Maybe
9import qualified Data.Set as Set
9import qualified Data.Set as Set
10import Data.Text (Text)
10import Data.Text (Text)
11
11
12−import Elm.Utils ((|>))
13−
14import qualified AST.Declaration as D
12import qualified AST.Declaration as D
15import qualified AST.Expression.Source as Src
13import qualified AST.Expression.Source as Src
16import qualified AST.Expression.Canonical as C
14import qualified AST.Expression.Canonical as C
@@ -46,20 +44,15 @@ type Result a =
46
44
47
45
48module'
46module'
49− :: [ModuleName.Canonical]
47+ :: Map.Map ModuleName.Raw ModuleName.Canonical
50 -> Module.Interfaces
48 -> Module.Interfaces
51 -> Module.Valid
49 -> Module.Valid
52 -> Result Module.Canonical
50 -> Result Module.Canonical
53−module' allCanonicalImports interfaces modul =
51+module' importDict interfaces modul =
54 let
52 let
55 (Module.Valid docs exports imports decls effects) =
53 (Module.Valid docs exports imports decls effects) =
56 Module.info modul
54 Module.info modul
57
55
58− importDict =
59− allCanonicalImports
60− |> map (\cName -> (ModuleName._module cName, cName))
61− |> Map.fromList
62−
63 (Result.Result uses warnings rawResults) =
56 (Result.Result uses warnings rawResults) =
64 do env <- Setup.environment importDict interfaces modul
57 do env <- Setup.environment importDict interfaces modul
65
58
src/Compile.hs+4−3
@@ -1,6 +1,7 @@
1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
2module Compile (compile) where
2module Compile (compile) where
3
3
4+import Data.Map (Map)
4import Data.Text (Text)
5import Data.Text (Text)
5
6
6import qualified AST.Expression.Canonical as Can
7import qualified AST.Expression.Canonical as Can
@@ -29,11 +30,11 @@ type Result =
29
30
30compile
31compile
31 :: Package.Name
32 :: Package.Name
32− -> [ModuleName.Canonical]
33+ -> Map ModuleName.Raw ModuleName.Canonical
33 -> Module.Interfaces
34 -> Module.Interfaces
34 -> Text
35 -> Text
35 -> Result Module.Optimized
36 -> Result Module.Optimized
36−compile packageName canonicalImports interfaces source =
37+compile packageName importDict interfaces source =
37 do
38 do
38 -- Parse the source code
39 -- Parse the source code
39 validModule <-
40 validModule <-
@@ -44,7 +45,7 @@ compile packageName canonicalImports interfaces source =
44 -- Canonicalize all variables, pinning down where they came from.
45 -- Canonicalize all variables, pinning down where they came from.
45 canonicalModule <-
46 canonicalModule <-
46 {-# SCC elm_compiler_canonicalize #-}
47 {-# SCC elm_compiler_canonicalize #-}
47− Canonicalize.module' canonicalImports interfaces validModule
48+ Canonicalize.module' importDict interfaces validModule
48
49
49 -- Run type inference on the program.
50 -- Run type inference on the program.
50 types <-
51 types <-
src/Elm/Compiler.hs+13−12
@@ -20,7 +20,7 @@ import qualified AST.Module.Name as ModuleName
20import qualified Compile
20import qualified Compile
21import qualified Docs.Check as Docs
21import qualified Docs.Check as Docs
22import qualified Elm.Compiler.Imports as Imports
22import qualified Elm.Compiler.Imports as Imports
23−import qualified Elm.Compiler.Module as PublicModule
23+import qualified Elm.Compiler.Module as M
24import qualified Elm.Compiler.Version
24import qualified Elm.Compiler.Version
25import qualified Elm.Docs as Docs
25import qualified Elm.Docs as Docs
26import qualified Elm.Package as Package
26import qualified Elm.Package as Package
@@ -55,7 +55,7 @@ data Tag
55 | Port
55 | Port
56
56
57
57
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])
59parseDependencies maybePkgName sourceCode =
59parseDependencies maybePkgName sourceCode =
60 case Parse.run Parse.header sourceCode of
60 case Parse.run Parse.header sourceCode of
61 Right header ->
61 Right header ->
@@ -65,7 +65,7 @@ parseDependencies maybePkgName sourceCode =
65 Left (Error (A.map Error.Syntax err))
65 Left (Error (A.map Error.Syntax err))
66
66
67
67
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])
69getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
69getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
70 let
70 let
71 tag =
71 tag =
@@ -88,15 +88,15 @@ getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
88
88
89
89
90{-| Compiles Elm source code to JavaScript. -}
90{-| Compiles Elm source code to JavaScript. -}
91−compile :: Context -> Text -> PublicModule.Interfaces -> (Localizer, [Warning], Either [Error] Result)
91+compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
92−compile context source interfaces =
92+compile context source =
93 let
93 let
94− (Context packageName isExposed dependencies) =
94+ (Context packageName exposed importDict interfaces) =
95 context
95 context
96
96
97 (Result.Result oneLocalizer warnings answer) =
97 (Result.Result oneLocalizer warnings answer) =
98− do modul <- Compile.compile packageName dependencies interfaces source
98+ do modul <- Compile.compile packageName importDict interfaces source
99− docs <- Result.format id (docsGen isExposed modul)
99+ docs <- Result.format id (docsGen exposed modul)
100
100
101 let interface = Module.toInterface packageName modul
101 let interface = Module.toInterface packageName modul
102 let javascript = {-# SCC elm_compiler_generate #-} JS.generate modul
102 let javascript = {-# SCC elm_compiler_generate #-} JS.generate modul
@@ -111,15 +111,16 @@ compile context source interfaces =
111
111
112data Context =
112data Context =
113 Context
113 Context
114− { _packageName :: Package.Name
114+ { _package :: Package.Name
115− , _isExposed :: Bool
115+ , _exposed :: Bool
116− , _dependencies :: [PublicModule.Canonical]
116+ , _imports :: Map.Map M.Raw M.Canonical
117+ , _interfaces :: M.Interfaces
117 }
118 }
118
119
119
120
120data Result = Result
121data Result = Result
121 { _docs :: Maybe Docs.Documentation
122 { _docs :: Maybe Docs.Documentation
122− , _interface :: PublicModule.Interface
123+ , _interface :: M.Interface
123 , _js :: LazyText.Text
124 , _js :: LazyText.Text
124 }
125 }
125
126