From 8cec5d5d1aa4faed7fe10c258fc210f41361a258 Mon Sep 17 00:00:00 2001 From: bringert Date: Wed, 30 Nov 2005 17:40:11 +0000 Subject: [PATCH] Transfer compiler: don't load the same module twice. --- src/Transfer/CompilerAPI.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Transfer/CompilerAPI.hs b/src/Transfer/CompilerAPI.hs index e1ef32f62..020393a02 100644 --- a/src/Transfer/CompilerAPI.hs +++ b/src/Transfer/CompilerAPI.hs @@ -11,6 +11,7 @@ import Transfer.SyntaxToCore import Transfer.PathUtil +import Data.List import System.Directory @@ -33,16 +34,18 @@ compile m = return (printTree $ declsToCore m) loadModule :: [FilePath] -- ^ directories to look for imported modules in -> FilePath -- ^ source module file -> IO [Decl] -loadModule path f = +loadModule = loadModule_ [] + where + loadModule_ ms path f = do s <- readFile f Module is ds <- case pModule (myLLexer s) of Bad e -> fail $ "Parse error in " ++ f ++ ": " ++ e Ok m -> return m - let deps = [ i | Import (Ident i) <- is ] + let load = [ i | Import (Ident i) <- is ] \\ ms let path' = directoryOf f : path - files <- mapM (findFile path' . (++".tr")) deps - dss <- mapM (loadModule path) files + files <- mapM (findFile path' . (++".tr")) load + dss <- mapM (loadModule_ (load++ms) path) files return $ concat (dss++[ds]) myLLexer :: String -> [Token]