import StgInterp ( runStgI )
\end{code}
+
+%************************************************************************
+%* *
+\subsection{The main compiler pipeline}
+%* *
+%************************************************************************
+
\begin{code}
hscMain
:: DynFlags
(ppSourceStats False rdr_module) >>
-- UniqueSupplies for later use (these are the only lower case uniques)
- mkSplitUniqSupply 'r' >>= \ rn_uniqs -> -- renamer
- mkSplitUniqSupply 'a' >>= \ tc_uniqs -> -- typechecker
mkSplitUniqSupply 'd' >>= \ ds_uniqs -> -- desugarer
mkSplitUniqSupply 'r' >>= \ ru_uniqs -> -- rules
mkSplitUniqSupply 'c' >>= \ c2s_uniqs -> -- core-to-stg
= if opt_D_show_passes
then \ what -> hPutStr stderr ("*** "++what++":\n")
else \ what -> return ()
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection{Initial persistent state}
+%* *
+%************************************************************************
+\begin{code}
+initPersistentCompilerState :: PersistentCompilerState
+initPersistentCompilerState
+ = PCS { pcsPST = initPackageDetails,
+ pcsInsts = emptyInstEnv,
+ pcsRules = emptyRuleEnv,
+ pcsPRS = initPersistentRenamerState }
+
+initPackageDetails :: PackageSymbolTable
+initPackageDetails = extendTypeEnv emptyModuleEnv wiredInThings
+
+initPersistentRenamerState :: PersistentRenamerState
+ = PRS { prsOrig = Orig { origNames = initOrigNames,
+ origIParam = emptyFM },
+ prsDecls = emptyNameEnv,
+ prsInsts = emptyBag,
+ prsRules = emptyBag
+ }
+
+initOrigNames :: FiniteMap (ModuleName,OccName) Name
+initOrigNames = grab knownKeyNames `plusFM` grab wiredInNames
+ where
+ grab names = foldl add emptyFM names
+ add env name = addToFM env (moduleName (nameModule name), nameOccName name) name
+\end{code}
+
+%************************************************************************
+%* *
+\subsection{Statistics}
+%* *
+%************************************************************************
+
+\begin{code}
ppSourceStats short (HsModule name version exports imports decls _ src_loc)
= (if short then hcat else vcat)
(map pp_val