[project @ 2000-11-17 13:33:17 by sewardj]
[ghc-hetmet.git] / ghc / compiler / main / GetImports.hs
index deeef72..b3a3416 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $Id: GetImports.hs,v 1.1 2000/11/16 15:57:05 simonmar Exp $
+-- $Id: GetImports.hs,v 1.2 2000/11/17 13:33:17 sewardj Exp $
 --
 -- GHC Driver program
 --
@@ -13,32 +13,24 @@ import Module
 import List
 import Char
 
-getImports :: String -> ([ModuleName], [ModuleName])
-getImports str
-   = let all_imps = (nub . gmiBase . clean) str
-         srcs     = concatMap (either unit nil) all_imps
-         normals  = concatMap (either nil unit) all_imps
-         unit x   = [x]
-         nil x    = []
-     in  (srcs, normals)
-
--- really get the imports from a de-litted, cpp'd, de-literal'd string
--- Lefts are source imports.  Rights are normal ones.
-gmiBase :: String -> [Either ModuleName ModuleName]
-gmiBase s
-   = f (words s)
+getImports :: String -> ([ModuleName], [ModuleName], ModuleName)
+getImports s
+   = f [{-accum source imports-}] [{-accum normal imports-}] 
+       (mkModuleName "Main") (words (clean s))
      where
-       f ("foreign" : "import" : ws) = f ws
-        f ("import" : "{-#" : "SOURCE" : "#-}" : "qualified" : m : ws) 
-           = Left (mkMN m) : f ws
-        f ("import" : "{-#" : "SOURCE" : "#-}" : m : ws) 
-           = Left (mkMN m) : f ws
-        f ("import" : "qualified" : m : ws) 
-           = Right (mkMN m) : f ws
-        f ("import" : m : ws) 
-           = Right (mkMN m) : f ws
-        f (w:ws) = f ws
-        f [] = []
+        f si ni _  ("module" : me : ws) = f si ni (mkModuleName me) ws
+
+       f si ni me ("foreign" : "import" : ws) = f si ni me ws
+        f si ni me ("import" : "{-#" : "SOURCE" : "#-}" : "qualified" : m : ws) 
+           = f ((mkMN m):si) ni me ws
+        f si ni me ("import" : "{-#" : "SOURCE" : "#-}" : m : ws) 
+           = f ((mkMN m):si) ni me ws
+        f si ni me ("import" : "qualified" : m : ws) 
+           = f si ((mkMN m):ni) me ws
+        f si ni me ("import" : m : ws) 
+           = f si ((mkMN m):ni) me ws
+        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 str)
         isModId c = isAlphaNum c || c `elem` "'_"