git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Resolve qualified imports
commit9276901dee4d0fb8d744e4dc0cd26f6512d393ae authorGary Burgess <gary.burgess@gmail.com> dateMon 17 Mar 2014, 19:25 (13 years ago) parent6921e13
1 file changed+11−11
src/Language/PureScript/Sugar/Names.hs+11−11
src/Language/PureScript/Sugar/Names.hs+11−11
@@ -322,10 +322,10 @@ type ExplicitImports = [DeclarationRef]
322322-- Finds the imports within a module, mapping the imported module name to an optional set of
323323-- explicitly imported declarations.
324324--
325−findImports :: [Declaration] -> M.Map ModuleName (Maybe ExplicitImports)
325+findImports :: [Declaration] -> M.Map ModuleName (Maybe ExplicitImports, Maybe ModuleName)
326326findImports = foldl findImports' M.empty
327327 where
328− findImports' result (ImportDeclaration mn expl _) = M.insert mn expl result
328+ findImports' result (ImportDeclaration mn expl qual) = M.insert mn (expl, qual) result
329329 findImports' result _ = result
330330
331331-- |
@@ -336,17 +336,17 @@ resolveImports env (Module currentModule decls _) =
336336 foldM resolveImport' (ImportEnvironment M.empty M.empty M.empty M.empty) (M.toList scope)
337337 where
338338 -- A Map from module name to imports from that module, where Nothing indicates everything is to be imported
339− scope :: M.Map ModuleName (Maybe ExplicitImports)
340− scope = M.insert currentModule Nothing (findImports decls)
341− resolveImport' imp (mn, i) = do
342− m <- maybe (throwError $ "Cannot import unknown module '" ++ show mn ++ "'") return $ mn `M.lookup` env
343− resolveImport currentModule mn m imp i
339+ scope :: M.Map ModuleName (Maybe ExplicitImports, Maybe ModuleName)
340+ scope = M.insert currentModule (Nothing, Nothing) (findImports decls)
341+ resolveImport' imp (mn, (explImports, impQual)) = do
342+ modExports <- maybe (throwError $ "Cannot import unknown module '" ++ show mn ++ "'") return $ mn `M.lookup` env
343+ resolveImport currentModule mn modExports imp impQual explImports
344344
345345-- |
346346-- Extends the local environment for a module by resolving an import of another module.
347347--
348−resolveImport :: ModuleName -> ModuleName -> Exports -> ImportEnvironment -> Maybe ExplicitImports -> Either String ImportEnvironment
349−resolveImport currentModule importModule exps imps = maybe importAll (foldM importExplicit imps)
348+resolveImport :: ModuleName -> ModuleName -> Exports -> ImportEnvironment -> Maybe ModuleName -> Maybe ExplicitImports-> Either String ImportEnvironment
349+resolveImport currentModule importModule exps imps impQual = maybe importAll (foldM importExplicit imps)
350350 where
351351
352352 -- Import everything from a module
@@ -381,8 +381,8 @@ resolveImport currentModule importModule exps imps = maybe importAll (foldM impo
381381
382382 -- Add something to the ImportEnvironment if it does not already exist there
383383 updateImports :: (Ord a, Show a) => M.Map (Qualified a) (Qualified a) -> a -> Either String (M.Map (Qualified a) (Qualified a))
384− updateImports m name = case M.lookup (Qualified Nothing name) m of
385− Nothing -> return $ M.insert (Qualified Nothing name) (Qualified (Just importModule) name) m
384+ updateImports m name = case M.lookup (Qualified impQual name) m of
385+ Nothing -> return $ M.insert (Qualified impQual name) (Qualified (Just importModule) name) m
386386 Just (Qualified Nothing _) -> error "Invalid state in updateImports"
387387 Just x@(Qualified (Just mn) _) -> throwError $
388388 if mn == currentModule || importModule == currentModule