@@ -11,6 +11,7 @@ import qualified Data.Traversable as Trav
11import qualified AST.Declaration as D
11import qualified AST.Declaration as D
12import qualified AST.Expression.Valid as Valid
12import qualified AST.Expression.Valid as Valid
13import qualified AST.Module as Module
13import qualified AST.Module as Module
14+import qualified AST.Module.Name as ModuleName
14import qualified AST.Pattern as P
15import qualified AST.Pattern as P
15import qualified AST.Type as Type
16import qualified AST.Type as Type
16import qualified AST.Variable as Var
17import qualified AST.Variable as Var
@@ -25,50 +26,57 @@ import qualified Canonicalize.Type as Canonicalize
27environment
28environment
29+ :: Map.Map ModuleName.Raw ModuleName.Canonical
28− :: Module.Interfaces
30+ -> Module.Interfaces
29 -> Module.ValidModule
31 -> Module.ValidModule
30 -> Result.ResultErr Env.Environment
32 -> Result.ResultErr Env.Environment
31−environment interfaces modul@(Module.Module _ _ _ _ (defaults, imports) decls) =
33+environment importDict interfaces (Module.Module name _ _ _ (defaults, imports) decls) =
32− let moduleName =
34+ let
33− Module.names modul
35+ allImports =
36+ imports ++ map (A.A (error "default import not found")) defaults
35− allImports =
38+ importPatchesResult =
36− imports ++ map (A.A (error "default import not found")) defaults
39+ concat <$> Trav.traverse (importPatches importDict interfaces) allImports
38− importPatchesResult =
41+ (typeAliasNodes, declPatches) =
39− concat <$> Trav.traverse (importPatches interfaces) allImports
42+ declarationsToPatches name decls
41− (typeAliasNodes, declPatches) =
42− declarationsToPatches moduleName decls
44− patches =
44+ patches =
45− (++) (Env.builtinPatches ++ declPatches) <$> importPatchesResult
45+ (++) (Env.builtinPatches ++ declPatches) <$> importPatchesResult
47− (Env.fromPatches moduleName <$> patches)
47+ (Env.fromPatches name <$> patches)
48− `Result.andThen` addTypeAliases moduleName typeAliasNodes
48+ `Result.andThen` addTypeAliases name typeAliasNodes
51-- PATCHES FOR IMPORTS
51-- PATCHES FOR IMPORTS
53importPatches
53importPatches
54+ :: Map.Map ModuleName.Raw ModuleName.Canonical
54− :: Module.Interfaces
55+ -> Module.Interfaces
55− -> A.Located (Module.Name, Module.ImportMethod)
56+ -> A.Located (ModuleName.Raw, Module.ImportMethod)
56 -> Result.ResultErr [Env.Patch]
57 -> Result.ResultErr [Env.Patch]
57−importPatches allInterfaces (A.A region (importName, method)) =
58+importPatches importDict allInterfaces (A.A region (rawImportName, method)) =
58− case restrictToPublicApi <$> Map.lookup importName allInterfaces of
59+ let
61+ do canonicalName <- Map.lookup rawImportName importDict
62+ interface <- Map.lookup canonicalName allInterfaces
63+ return (canonicalName, restrictToPublicApi interface)
65+ case maybeInterface of
59 Nothing ->
66 Nothing ->
60− if Module.nameIsNative importName then
67+ if ModuleName.isNative rawImportName then
61 Result.ok []
68 Result.ok []
64 allInterfaces
71 allInterfaces
65 |> Map.keys
72 |> Map.keys
66− |> Error.nearbyNames Module.nameToString importName
73+ |> map ModuleName._module
74+ |> Error.nearbyNames ModuleName.toString rawImportName
67− |> Error.moduleNotFound importName
75+ |> Error.moduleNotFound rawImportName
68 |> A.A region
76 |> A.A region
69 |> Result.err
77 |> Result.err
71− Just interface ->
79+ Just (importName, interface) ->
72 let (Module.ImportMethod maybeAlias listing) =
80 let (Module.ImportMethod maybeAlias listing) =
@@ -76,7 +84,7 @@ importPatches allInterfaces (A.A region (importName, method)) =
78 qualifier =
86 qualifier =
79− maybe (Module.nameToString importName) id maybeAlias
87+ maybe (ModuleName.toString rawImportName) id maybeAlias
81 qualifiedPatches =
89 qualifiedPatches =
82 interfacePatches importName (qualifier ++ ".") interface
90 interfacePatches importName (qualifier ++ ".") interface
@@ -89,7 +97,7 @@ importPatches allInterfaces (A.A region (importName, method)) =
89 (++) qualifiedPatches <$> unqualifiedPatches
97 (++) qualifiedPatches <$> unqualifiedPatches
92−interfacePatches :: Module.Name -> String -> Module.Interface -> [Env.Patch]
100+interfacePatches :: ModuleName.Canonical -> String -> Module.Interface -> [Env.Patch]
93interfacePatches moduleName prefix interface =
101interfacePatches moduleName prefix interface =
94 let genericPatch mkPatch name value =
102 let genericPatch mkPatch name value =
95 mkPatch (prefix ++ name) value
103 mkPatch (prefix ++ name) value
@@ -124,7 +132,7 @@ interfacePatches moduleName prefix interface =
125valueToPatches
133valueToPatches
126 :: R.Region
134 :: R.Region
127− -> Module.Name
135+ -> ModuleName.Canonical
128 -> Module.Interface
136 -> Module.Interface
129 -> Var.Value
137 -> Var.Value
130 -> Result.ResultErr [Env.Patch]
138 -> Result.ResultErr [Env.Patch]
@@ -139,7 +147,7 @@ valueToPatches region moduleName interface value =
139 Module.iExports interface
147 Module.iExports interface
140 |> getNames
148 |> getNames
141 |> Error.nearbyNames id x
149 |> Error.nearbyNames id x
142− |> Error.valueNotFound moduleName x
150+ |> Error.valueNotFound (ModuleName._module moduleName) x
143 |> A.A region
151 |> A.A region
144 |> Result.err
152 |> Result.err
@@ -232,7 +240,7 @@ node region name tvars alias =
234addTypeAliases
242addTypeAliases
235− :: Module.Name
243+ :: ModuleName.Canonical
236 -> [Node]
244 -> [Node]
237 -> Env.Environment
245 -> Env.Environment
238 -> Result.ResultErr Env.Environment
246 -> Result.ResultErr Env.Environment
@@ -244,7 +252,7 @@ addTypeAliases moduleName typeAliasNodes initialEnv =
246addTypeAlias
254addTypeAlias
247− :: Module.Name
255+ :: ModuleName.Canonical
248 -> Graph.SCC (R.Region, String, [String], Type.Raw)
256 -> Graph.SCC (R.Region, String, [String], Type.Raw)
249 -> Env.Environment
257 -> Env.Environment
250 -> Result.ResultErr Env.Environment
258 -> Result.ResultErr Env.Environment
@@ -272,7 +280,7 @@ addTypeAlias moduleName scc env =
272-- DECLARATIONS TO PATCHES
280-- DECLARATIONS TO PATCHES
274declarationsToPatches
282declarationsToPatches
275− :: Module.Name
283+ :: ModuleName.Canonical
276 -> [D.ValidDecl]
284 -> [D.ValidDecl]
277 -> ([Node], [Env.Patch])
285 -> ([Node], [Env.Patch])
278declarationsToPatches moduleName decls =
286declarationsToPatches moduleName decls =
@@ -288,7 +296,7 @@ declarationsToPatches moduleName decls =
288-- _values that are defined as top-level declarations are (Var.TopLevel ...)
296-- _values that are defined as top-level declarations are (Var.TopLevel ...)
289-- all other _values are local (Var.Local)
297-- all other _values are local (Var.Local)
290declToPatches
298declToPatches
291− :: Module.Name
299+ :: ModuleName.Canonical
292 -> D.ValidDecl
300 -> D.ValidDecl
293 -> (Maybe Node, [Env.Patch])
301 -> (Maybe Node, [Env.Patch])
294declToPatches moduleName (A.A (region,_) decl) =
302declToPatches moduleName (A.A (region,_) decl) =