From d265857e340dc68cf2ea62654b9dda059ae36648 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Wed, 25 Apr 2007 17:25:49 +0000 Subject: [PATCH] Handle nested includes properly --- fco2/Parse.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fco2/Parse.hs b/fco2/Parse.hs index 1cd4ae3..0d6d2e4 100644 --- a/fco2/Parse.hs +++ b/fco2/Parse.hs @@ -1727,7 +1727,7 @@ preFindIncludes source Nothing -> [] | l <- lines source] where - incRE = mkRegex "^#(INCLUDE|USE) +\"([^\"]*)\"" + incRE = mkRegex "^ *#(INCLUDE|USE) +\"([^\"]*)\"" -- | If a module name doesn't already have a suffix, add one. mangleModName :: String -> String @@ -1753,7 +1753,7 @@ loadSource file = load file file source <- liftIO $ readSource realName modify $ (\ps -> ps { psSourceFiles = (file, source) : psSourceFiles ps }) let deps = map mangleModName $ preFindIncludes source - sequence_ [load dep (joinPath file dep) | dep <- deps] + sequence_ [load dep (joinPath realName dep) | dep <- deps] --}}} --{{{ entry points for the parser itself @@ -1767,7 +1767,9 @@ testParse prod text -- definitions available to a process. parseFile :: Monad m => String -> ParseState -> m (A.Process -> A.Process, ParseState) parseFile file ps - = do let source = fromJust $ lookup file (psSourceFiles ps) + = do let source = case lookup file (psSourceFiles ps) of + Just s -> s + Nothing -> dieIO $ "Failed to preload file: " ++ show file let ps' = ps { psLoadedFiles = file : psLoadedFiles ps } case runParser sourceFile ps' file source of Left err -> dieIO $ "Parse error: " ++ show err