diff options
| -rw-r--r-- | src/Main.hs | 20 | 
1 files changed, 11 insertions, 9 deletions
| diff --git a/src/Main.hs b/src/Main.hs index 2e5610d5..441dc519 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -132,8 +132,9 @@ main = handleTopExceptions $ do    libDir <- handleFlags flags fileArgs    -- initialize GHC  +  restGhcFlags <- tryParseStaticFlags flags    (session, dynflags) <- startGHC libDir -  dynflags' <- parseGhcFlags dynflags flags +  dynflags' <- parseGhcFlags dynflags restGhcFlags    setSessionDynFlags session dynflags'    -- load package data (from .haddock-files), typecheck input files and create  @@ -170,17 +171,19 @@ handleFlags flags fileArgs = do  -- Flags   -------------------------------------------------------------------------------- -parseGhcFlags dflags flags = foldlM parseFlag dflags ghcFlags -  where  -    -- a list of ghc flags with arguments, e.g. [[-o, odir],[-O]] -    ghcFlags = [ words str | Flag_GhcFlag str <- flags ] +-- | Filter out the GHC specific flags and try to parse and set them as static  +-- flags. Return a list of flags that couldn't be parsed.  +tryParseStaticFlags flags = do +  let ghcFlags = [ str | Flag_GhcFlag str <- flags ] +  parseStaticFlags ghcFlags +-- | Try to parse and set dynamic GHC flags +parseGhcFlags dflags ghcFlags = foldlM parseFlag dflags (map words ghcFlags) +  where       -- try to parse a flag as either a dynamic or static GHC flag      parseFlag dynflags ghcFlag = do        (dynflags', rest) <- parseDynamicFlags dynflags ghcFlag -      when (rest == ghcFlag) $ do  -        rest' <- parseStaticFlags ghcFlag -        when (rest' == ghcFlag) $ +      when (rest == ghcFlag) $            throwE ("Couldn't parse GHC flag: " ++ (unwords ghcFlag))                   return dynflags' @@ -310,7 +313,6 @@ startGHC libDir = do  -- TODO: clean up, restructure and make sure it handles cleanup  sortAndCheckModules :: Session -> [FilePath] -> IO [CheckedMod]  sortAndCheckModules session files = do  -  parseStaticFlags [] -- to avoid a GHC bug    targets <- mapM (\s -> guessTarget s Nothing) files    setTargets session targets     mbModGraph <- depanal session [] True | 
