[project @ 2003-03-03 12:43:31 by simonmar]
A round of space-leak fixing.
- re-instate zapping of the PersistentCompilerState at various
points during the compilation cycle in HscMain. This affects
one-shot compilation only, since in this mode the information
collected in the PCS is not required after creating the final
interface file.
- Unravel the recursive dependency between MkIface and
CoreTidy/CoreToStg. Previously the CafInfo for each binding was
calculated by CoreToStg, and fed back into the IdInfo of the Ids
generated by CoreTidy (an earlier pass). MkIface then took this
IdInfo and the bindings from CoreTidy to generate the interface;
but it couldn't do this until *after* CoreToStg, because the CafInfo
hadn't been calculated yet. The result was that the CoreTidy
output lived until after CoreToStg, and at the same time as the
CorePrep and STG syntax, which is wasted space, not to mention
the complexity and general ugliness in HscMain.
So now we calculate CafInfo directly in CoreTidy. The downside is
that we have to predict what CorePrep is going to do to the
bindings so we can tell what will turn into a CAF later, but it's
no worse than before (it turned out that we were doing this
prediction before in CoreToStg anyhow).
- The typechecker lazilly typechecks unfoldings. It turns out that
this is a good idea from a performance perspective, but it also
means that it must hang on to all the information it needs to
do the typechecking. Previously this meant holding on to the
whole of the typechecker's environment, which includes all sorts
of stuff which isn't necessary to typecheck unfoldings. By paring
down the environment captured by the lazy unfoldings, we can
save quite a bit of space in the phases after typechecking.
19 files changed: