Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/ac11b1f14c3d0d507cf11eade1855ffc440d3b7b >--------------------------------------------------------------- commit ac11b1f14c3d0d507cf11eade1855ffc440d3b7b Author: Simon Peyton Jones <[email protected]> Date: Tue Nov 29 15:49:24 2011 +0000 Refactor (again) the treatment of record-selector bindings We were generating them from the tcg_tcs field of the TcGblEnv, but that goes badly wrong when there are top-level Template Haskell splices, because the tcg_tcs field grows successively. If we generate record-selector binds for all the TyCons in the accumulated list, we generate them multiple times for TyCons earlier in the program. This what was happening in Trac #5665: data T = T { x :: Int } $(f 4) -- Top level splice ..more code.. Here the record selector bindings for T were being generated twice. Better instead to generate the record-selector bindings in TcTyClsDecls, right where the new TyCons are being declared (as indeed they were some time ago). This pushed me into doing some refactoring: instead of returning the record bindings, tcTyAndClassDecls adds them to the tcg_binds field of the TcGblEnv. I think the result is a bit nicer, and it has the additional merit of working. compiler/typecheck/TcBinds.lhs | 66 +++++++++++++++++++++-------------- compiler/typecheck/TcDeriv.lhs | 2 +- compiler/typecheck/TcInstDcls.lhs | 20 ++++++----- compiler/typecheck/TcRnDriver.lhs | 36 +++++-------------- compiler/typecheck/TcRnMonad.lhs | 15 +++++--- compiler/typecheck/TcTyClsDecls.lhs | 34 ++++++++++------- 6 files changed, 91 insertions(+), 82 deletions(-) Diff suppressed because of size. To see it, use: git show ac11b1f14c3d0d507cf11eade1855ffc440d3b7b _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
