-- Interfaces for the compilation manager (interpreted/batch-mode)
preprocess,
- compile,
+ compile, compile',
link,
) where
= ASSERT (isJust maybe_old_linkable)
return maybe_old_linkable
- handleBatch (HscRecomp hasStub)
+ handleBatch (HscRecomp hasStub _)
| isHsBoot src_flavour
= do when (isObjectTarget hsc_lang) $ -- interpreted reaches here too
liftIO $ SysTools.touch dflags' "Touching object file"
(hs_unlinked ++ stub_unlinked)
return (Just linkable)
- handleInterpreted InteractiveNoRecomp
+ handleInterpreted HscNoRecomp
= ASSERT (isJust maybe_old_linkable)
return maybe_old_linkable
- handleInterpreted (InteractiveRecomp hasStub comp_bc modBreaks)
+ handleInterpreted (HscRecomp _hasStub Nothing)
+ = ASSERT (isHsBoot src_flavour)
+ return maybe_old_linkable
+ handleInterpreted (HscRecomp hasStub (Just (comp_bc, modBreaks)))
= do stub_unlinked <- getStubLinkable hasStub
let hs_unlinked = [BCOs comp_bc modBreaks]
unlinked_time = ms_hs_date summary
src_opts <- liftIO $ getOptionsFromFile dflags0 input_fn
(dflags, unhandled_flags, warns)
<- liftIO $ parseDynamicNoPackageFlags dflags0 src_opts
- liftIO $ handleFlagWarnings dflags warns -- XXX: may exit the program
- liftIO $ checkProcessArgsResult unhandled_flags -- XXX: may throw program error
+ handleFlagWarnings dflags warns
+ checkProcessArgsResult unhandled_flags
if not (dopt Opt_Cpp dflags) then
-- no need to preprocess CPP, just pass input file along
m <- liftIO $ getCoreModuleName input_fn
return (Nothing, mkModuleName m, [], [])
- _ -> liftIO $ do
- buf <- hGetStringBuffer input_fn
+ _ -> do
+ buf <- liftIO $ hGetStringBuffer input_fn
(src_imps,imps,L _ mod_name) <- getImports dflags buf input_fn (basename <.> suff)
return (Just buf, mod_name, imps, src_imps)
-- than the source file (else we wouldn't be in HscNoRecomp)
-- but we touch it anyway, to keep 'make' happy (we think).
return (StopLn, dflags', Just location4, o_file)
- (HscRecomp hasStub)
+ (HscRecomp hasStub _)
-> do when hasStub $
do stub_o <- compileStub hsc_env' mod location4
liftIO $ consIORef v_Ld_inputs stub_o