[project @ 2005-05-17 12:00:04 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / GetImports.hs
index c165b4a..77ca4b5 100644 (file)
@@ -17,7 +17,7 @@ import HsSyn          ( ImportDecl(..), HsModule(..) )
 import Module          ( Module, mkModule )
 import PrelNames        ( gHC_PRIM )
 import StringBuffer    ( StringBuffer, hGetStringBuffer )
-import SrcLoc          ( Located(..), mkSrcLoc, unLoc )
+import SrcLoc          ( Located(..), mkSrcLoc, unLoc, noSrcSpan )
 import FastString      ( mkFastString )
 import DynFlags        ( DynFlags )
 import ErrUtils
@@ -32,12 +32,14 @@ import List
 -- 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 :: DynFlags -> FilePath -> IO ([Module], [Module], Module)
+getImportsFromFile :: DynFlags -> FilePath
+   -> IO ([Located Module], [Located Module], Located Module)
 getImportsFromFile dflags filename = do
   buf <- hGetStringBuffer filename
   getImports dflags buf filename
 
-getImports :: DynFlags -> StringBuffer -> FilePath -> IO ([Module], [Module], Module)
+getImports :: DynFlags -> StringBuffer -> FilePath
+    -> IO ([Located Module], [Located Module], Located Module)
 getImports dflags buf filename = do
   let loc  = mkSrcLoc (mkFastString filename) 1 0
   case unP parseHeader (mkPState buf loc dflags) of
@@ -46,11 +48,12 @@ getImports dflags buf filename = do
          case rdr_module of
            L _ (HsModule mod _ imps _ _) ->
              let
-               mod_name | Just (L _ m) <- mod = m
-                        | otherwise           = mkModule "Main"
+               mod_name | Just located_mod <- mod = located_mod
+                        | otherwise               = L noSrcSpan (mkModule "Main")
                (src_idecls, ord_idecls) = partition isSourceIdecl (map unLoc imps)
                source_imps   = map getImpMod src_idecls        
-               ordinary_imps = filter (/= gHC_PRIM) (map getImpMod ord_idecls)
+               ordinary_imps = filter ((/= gHC_PRIM) . unLoc) 
+                                       (map getImpMod ord_idecls)
                     -- GHC.Prim doesn't exist physically, so don't go looking for it.
              in
              return (source_imps, ordinary_imps, mod_name)
@@ -60,4 +63,4 @@ parseError span err = throwDyn (ProgramError err_doc)
 
 isSourceIdecl (ImportDecl _ s _ _ _) = s
 
-getImpMod (ImportDecl (L _ mod) _ _ _ _) = mod
+getImpMod (ImportDecl located_mod _ _ _ _) = located_mod