import FiniteMap
import Panic ( panic )
import OccName ( occNameString )
-import ErrUtils ( showPass )
-import CmdLineOpts ( DynFlags )
+import ErrUtils ( showPass, dumpIfSet_dyn )
+import CmdLineOpts ( DynFlags, DynFlag(..) )
import Foreign
import CTypes
= do showPass dflags "StgToInterp"
let ibinds = concatMap (translateBind emptyUniqSet) binds
let tycs = local_tycons ++ map classTyCon local_classes
+ dumpIfSet_dyn dflags Opt_D_dump_InterpSyn
+ "Convert To InterpSyn" (vcat (map pprIBind ibinds))
itblenv <- mkITbls tycs
return (ibinds, itblenv)
-> IO UnlinkedIExpr
stgExprToInterpSyn dflags expr
= do showPass dflags "StgToInterp"
- return (stg2expr emptyUniqSet expr)
+ let iexpr = stg2expr emptyUniqSet expr
+ dumpIfSet_dyn dflags Opt_D_dump_InterpSyn
+ "Convert To InterpSyn" (pprIExpr iexpr)
+ return iexpr
translateBind :: UniqSet Id -> StgBinding -> [UnlinkedIBind]
translateBind ie (StgNonRec v e) = [IBind v (rhs2expr ie e)]
-----------------------------------------------------------------------------
--- $Id: DriverFlags.hs,v 1.21 2000/11/21 14:34:29 simonmar Exp $
+-- $Id: DriverFlags.hs,v 1.22 2000/11/21 16:43:20 simonmar Exp $
--
-- Driver flags
--
, ( "ddump-rn-stats", NoArg (setDynFlag Opt_D_dump_rn_stats) )
, ( "ddump-stix", NoArg (setDynFlag Opt_D_dump_stix) )
, ( "ddump-simpl-stats", NoArg (setDynFlag Opt_D_dump_simpl_stats) )
+ , ( "ddump-interpsyn", NoArg (setDynFlag Opt_D_dump_InterpSyn) )
, ( "dsource-stats", NoArg (setDynFlag Opt_D_source_stats) )
, ( "dverbose-core2core", NoArg (setDynFlag Opt_D_verbose_core2core) )
, ( "dverbose-stg2stg", NoArg (setDynFlag Opt_D_verbose_stg2stg) )
RecompileRequired, outOfDate, recompileRequired
)
import RnHiFiles ( readIface, removeContext, loadInterface,
- loadExports, loadFixDecls, loadDeprecs )
+ loadExports, loadFixDecls, loadDeprecs,
+ tryLoadInterface )
import RnEnv ( availsToNameSet, availName, mkIfaceGlobalRdrEnv,
- emptyAvailEnv, unitAvailEnv, availEnvElts, plusAvailEnv, groupAvails,
- warnUnusedImports, warnUnusedLocalBinds, warnUnusedModules,
- lookupOrigNames, lookupSrcName, newGlobalName, unQualInScope
+ emptyAvailEnv, unitAvailEnv, availEnvElts,
+ plusAvailEnv, groupAvails, warnUnusedImports,
+ warnUnusedLocalBinds, warnUnusedModules,
+ lookupOrigNames, lookupSrcName,
+ newGlobalName, unQualInScope
)
import Module ( Module, ModuleName, WhereFrom(..),
moduleNameUserString, moduleName,
-> HomeIfaceTable -> HomeSymbolTable
-> PersistentCompilerState
-> Module -> RdrNameHsExpr
- -> IO (PersistentCompilerState, Maybe (PrintUnqualified, (RenamedHsExpr, [RenamedHsDecl])))
+ -> IO ( PersistentCompilerState,
+ Maybe (PrintUnqualified, (RenamedHsExpr, [RenamedHsDecl]))
+ )
renameExpr dflags hit hst pcs this_module expr
- | Just iface <- lookupModuleEnv hit this_module
- = do { let rdr_env = mi_globals iface
- ; let print_unqual = unQualInScope rdr_env
-
- ; renameSource dflags hit hst pcs this_module $
- initRnMS rdr_env emptyLocalFixityEnv SourceMode (rnExpr expr) `thenRn` \ (e,fvs) ->
- slurpImpDecls fvs `thenRn` \ decls ->
- doptRn Opt_D_dump_rn `thenRn` \ dump_rn ->
- ioToRnM (dumpIfSet dump_rn "Renamer:" (ppr e)) `thenRn_`
+ = do { renameSource dflags hit hst pcs this_module $
+ tryLoadInterface doc (moduleName this_module) ImportByUser
+ `thenRn` \ (iface, maybe_err) ->
+ case maybe_err of {
+ Just msg -> ioToRnM (printErrs alwaysQualify
+ (ptext SLIT("failed to load interface for")
+ <+> quotes (ppr this_module)
+ <> char ':' <+> msg)) `thenRn_`
+ returnRn Nothing;
+ Nothing ->
+
+ let rdr_env = mi_globals iface
+ print_unqual = unQualInScope rdr_env
+ in
+
+ initRnMS rdr_env emptyLocalFixityEnv SourceMode (rnExpr expr)
+ `thenRn` \ (e,fvs) ->
+ lookupOrigNames implicit_occs `thenRn` \ implicit_names ->
+ slurpImpDecls (fvs `plusFV` implicit_names) `thenRn` \ decls ->
+ doptRn Opt_D_dump_rn `thenRn` \ dump_rn ->
+ ioToRnM (dumpIfSet dump_rn "Renamer:" (ppr e))
+ `thenRn_`
returnRn (Just (print_unqual, (e, decls)))
- }
-
- | otherwise
- = do { printErrs alwaysQualify (ptext SLIT("renameExpr: Bad module context") <+> ppr this_module)
- ; return (pcs, Nothing)
- }
+ }}
+ where
+ implicit_occs = string_occs
+ doc = text "context for compiling expression"
\end{code}
-- generate code
implicit_occs = string_occs ++ foldr ((++) . get) implicit_main decls
- -- Virtually every program has error messages in it somewhere
- string_occs = [unpackCString_RDR, unpackCStringFoldr_RDR,
- unpackCStringUtf8_RDR, eqString_RDR]
get (TyClD (TyData _ _ _ _ _ _ (Just deriv_classes) _ _ _))
= concat (map get_deriv deriv_classes)
get_deriv cls = case lookupUFM derivingOccurrences cls of
Nothing -> []
Just occs -> occs
+
+-- Virtually every program has error messages in it somewhere
+string_occs = [unpackCString_RDR, unpackCStringFoldr_RDR,
+ unpackCStringUtf8_RDR, eqString_RDR]
\end{code}
\begin{code}