projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2004-11-26 16:19:45 by simonmar]
[ghc-hetmet.git]
/
ghc
/
compiler
/
main
/
GetImports.hs
diff --git
a/ghc/compiler/main/GetImports.hs
b/ghc/compiler/main/GetImports.hs
index
84d6831
..
249e1e1
100644
(file)
--- a/
ghc/compiler/main/GetImports.hs
+++ b/
ghc/compiler/main/GetImports.hs
@@
-1,5
+1,5
@@
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
--- $Id: GetImports.hs,v 1.7 2001/05/29 01:07:00 sof Exp $
+-- $Id: GetImports.hs,v 1.11 2004/11/26 16:20:57 simonmar Exp $
--
-- GHC Driver program
--
--
-- GHC Driver program
--
@@
-18,7
+18,7
@@
import Char
-- getImportsFromFile is careful to close the file afterwards, otherwise
-- we can end up with a large number of open handles before the garbage
-- collector gets around to closing them.
-- getImportsFromFile is careful to close the file afterwards, otherwise
-- we can end up with a large number of open handles before the garbage
-- collector gets around to closing them.
-getImportsFromFile :: String -> IO ([ModuleName], [ModuleName], ModuleName)
+getImportsFromFile :: String -> IO ([Module], [Module], Module)
getImportsFromFile filename
= do hdl <- openFile filename ReadMode
modsrc <- hGetContents hdl
getImportsFromFile filename
= do hdl <- openFile filename ReadMode
modsrc <- hGetContents hdl
@@
-27,11
+27,11
@@
getImportsFromFile filename
hClose hdl
return (srcimps,imps,mod_name)
hClose hdl
return (srcimps,imps,mod_name)
-getImports :: String -> ([ModuleName], [ModuleName], ModuleName)
+getImports :: String -> ([Module], [Module], Module)
getImports s
= case f [{-accum source imports-}] [{-accum normal imports-}]
Nothing (clean s) of
getImports s
= case f [{-accum source imports-}] [{-accum normal imports-}]
Nothing (clean s) of
- (si, ni, Nothing) -> (si, ni, mkModuleName "Main")
+ (si, ni, Nothing) -> (si, ni, mkModule "Main")
(si, ni, Just me) -> (si, ni, me)
where
-- Only pick up the name following 'module' the first time.
(si, ni, Just me) -> (si, ni, me)
where
-- Only pick up the name following 'module' the first time.
@@
-59,8
+59,8
@@
getImports s
f si ni me (w:ws) = f si ni me ws
f si ni me [] = (nub si, nub ni, me)
f si ni me (w:ws) = f si ni me ws
f si ni me [] = (nub si, nub ni, me)
- mkMN str = mkModuleName (takeWhile isModId (reverse str))
- isModId c = isAlphaNum c || c `elem` "'_"
+ mkMN str = mkModule (takeWhile isModId (reverse str))
+ isModId c = isAlphaNum c || c `elem` "'._"
-- remove literals and comments from a string, producing a
-- remove literals and comments from a string, producing a
@@
-83,6
+83,10
@@
clean s
keep acc ('-':'-':cs) = cons acc (linecomment cs)
keep acc ('{':'-':'#':' ':cs) = cons acc (cons "#-{" (keep "" cs))
keep acc ('{':'-':cs) = cons acc (runcomment (0::Int) cs) -- -}
keep acc ('-':'-':cs) = cons acc (linecomment cs)
keep acc ('{':'-':'#':' ':cs) = cons acc (cons "#-{" (keep "" cs))
keep acc ('{':'-':cs) = cons acc (runcomment (0::Int) cs) -- -}
+ keep acc ('{':cs) = cons acc (keep "" cs)
+ keep acc (';':cs) = cons acc (keep "" cs)
+ -- treat ';' and '{' as word separators so that stuff
+ -- like "{import A;" and ";;;;import B;" are handled correctly.
keep acc (c:cs) = keep (c:acc) cs
cons [] xs = xs
keep acc (c:cs) = keep (c:acc) cs
cons [] xs = xs