X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FGetImports.hs;h=77ca4b5967bccb6d2c21e0359cefdfd9027f7a09;hb=8d6afe743a98a77c08f917438d012d95857c278d;hp=c165b4a58a3a67f217fe11414a6a113076bed538;hpb=32fce1ae9d69cb8801ba045aae2ec541d7c161b8;p=ghc-hetmet.git diff --git a/ghc/compiler/main/GetImports.hs b/ghc/compiler/main/GetImports.hs index c165b4a..77ca4b5 100644 --- a/ghc/compiler/main/GetImports.hs +++ b/ghc/compiler/main/GetImports.hs @@ -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