so we no longer need to use defaultDynFlags there
runPhase (Cpp sf) _stop hsc_env basename suff input_fn get_output_fn maybe_loc
= do let dflags0 = hsc_dflags hsc_env
runPhase (Cpp sf) _stop hsc_env basename suff input_fn get_output_fn maybe_loc
= do let dflags0 = hsc_dflags hsc_env
- src_opts <- getOptionsFromFile input_fn
+ src_opts <- getOptionsFromFile dflags0 input_fn
(dflags,unhandled_flags) <- parseDynamicFlags dflags0 (map unLoc src_opts)
checkProcessArgsResult unhandled_flags (basename <.> suff)
(dflags,unhandled_flags) <- parseDynamicFlags dflags0 (map unLoc src_opts)
checkProcessArgsResult unhandled_flags (basename <.> suff)
let dflags = hsc_dflags hsc_env
-- case we bypass the preprocessing stage?
let
let dflags = hsc_dflags hsc_env
-- case we bypass the preprocessing stage?
let
- local_opts = getOptions buf src_fn
+ local_opts = getOptions dflags buf src_fn
--
(dflags', _errs) <- parseDynamicFlags dflags (map unLoc local_opts)
-- XXX: shouldn't we be reporting the errors?
--
(dflags', _errs) <- parseDynamicFlags dflags (map unLoc local_opts)
-- XXX: shouldn't we be reporting the errors?
--------------------------------------------------------------
--------------------------------------------------------------
-getOptionsFromFile :: FilePath -- input file
+getOptionsFromFile :: DynFlags
+ -> FilePath -- input file
-> IO [Located String] -- options, if any
-> IO [Located String] -- options, if any
-getOptionsFromFile filename
+getOptionsFromFile dflags filename
= Control.Exception.bracket
(openBinaryFile filename ReadMode)
(hClose)
= Control.Exception.bracket
(openBinaryFile filename ReadMode)
(hClose)
loop handle buf
| len buf == 0 = return []
| otherwise
loop handle buf
| len buf == 0 = return []
| otherwise
- = case getOptions' buf filename of
+ = case getOptions' dflags buf filename of
(Nothing, opts) -> return opts
(Just buf', opts) -> do nextBlock <- hGetStringBufferBlock handle blockSize
newBuf <- appendStringBuffers buf' nextBlock
(Nothing, opts) -> return opts
(Just buf', opts) -> do nextBlock <- hGetStringBufferBlock handle blockSize
newBuf <- appendStringBuffers buf' nextBlock
else do opts' <- loop handle newBuf
return (opts++opts')
else do opts' <- loop handle newBuf
return (opts++opts')
-getOptions :: StringBuffer -> FilePath -> [Located String]
-getOptions buf filename
- = case getOptions' buf filename of
+getOptions :: DynFlags -> StringBuffer -> FilePath -> [Located String]
+getOptions dflags buf filename
+ = case getOptions' dflags buf filename of
(_,opts) -> opts
-- The token parser is written manually because Happy can't
-- return a partial result when it encounters a lexer error.
-- We want to extract options before the buffer is passed through
-- CPP, so we can't use the same trick as 'getImports'.
(_,opts) -> opts
-- The token parser is written manually because Happy can't
-- return a partial result when it encounters a lexer error.
-- We want to extract options before the buffer is passed through
-- CPP, so we can't use the same trick as 'getImports'.
-getOptions' :: StringBuffer -- Input buffer
+getOptions' :: DynFlags
+ -> StringBuffer -- Input buffer
-> FilePath -- Source file. Used for msgs only.
-> ( Maybe StringBuffer -- Just => we can use more input
, [Located String] -- Options.
)
-> FilePath -- Source file. Used for msgs only.
-> ( Maybe StringBuffer -- Just => we can use more input
, [Located String] -- Options.
)
-getOptions' buf filename
- = parseToks (lexAll (pragState buf loc))
+getOptions' dflags buf filename
+ = parseToks (lexAll (pragState dflags buf loc))
where loc = mkSrcLoc (mkFastString filename) 1 0
getToken (_buf,L _loc tok) = tok
where loc = mkSrcLoc (mkFastString filename) 1 0
getToken (_buf,L _loc tok) = tok
-- PState for parsing options pragmas
--
-- PState for parsing options pragmas
--
-pragState :: StringBuffer -> SrcLoc -> PState
-pragState buf loc =
+pragState :: DynFlags -> StringBuffer -> SrcLoc -> PState
+pragState dynflags buf loc =
messages = emptyMessages,
messages = emptyMessages,
- -- XXX defaultDynFlags is not right, but we don't have a real
- -- dflags handy
- dflags = defaultDynFlags,
last_loc = mkSrcSpan loc loc,
last_offs = 0,
last_len = 0,
last_loc = mkSrcSpan loc loc,
last_offs = 0,
last_len = 0,