[commit: ghc] master: A raft of changes driven by Trac #8540 (7881488)

git at git.haskell.org git at git.haskell.org
Fri Nov 22 16:39:25 UTC 2013


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/7881488201629aa1ab36e3e0fbeb4d7b4b85bd91/ghc

>---------------------------------------------------------------

commit 7881488201629aa1ab36e3e0fbeb4d7b4b85bd91
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Fri Nov 22 09:24:54 2013 +0000

    A raft of changes driven by Trac #8540
    
    The root cause of #8450 is that the new Template Haskell story, with
    the renamer doing more of the work of Template Haskell, wasn't dealing
    correctly with the keepAlive problem.  Consider
        g = ..blah...
        f = [| g |]
    Then f's RHS refers to g's name but not to g, so g was being discarded
    as dead code.
    
    Fixing this sucked me into a deep swamp of understanding how all the moving
    parts of hte new Template Haskell fit together, leading to a large collection
    of related changes and better documentation.  Specifically:
    
    * Instead of putting the TH level of a binder in the LocalRdrEnv, there
      is now a separate field
          tcl_th_bndrs :: NameEnv (TopLevelFlag, ThLevel)
      in the TcLclEnv, which records for each binder
         a) whether it is syntactically a top-level binder or not
         b) its TH level
      This deals uniformly with top-level and non-top-level binders, which was
      previously dealt with via greviously-delicate meddling with Internal and
      External Names.  Much better.
    
    * As a result I could remove the tct_level field of ATcId.
    
    * There are consequential changes in TcEnv too, which must also extend the
      level bindings.  Again, more clarity.
    
      I renamed TcEnv.tcExtendTcTyThingEnv to tcExtendKindEnv2, since it's only used
      during kind inference, for (AThing kind) and APromotionErr; and that is
      relevant to whether we want to extend the tcl_th_bndrs field (no).
    
    * I de-crufted the code in RnEnv.extendGlobalRdrEnv, by getting rid of the
      qual_gre code which said "Seems like 5 times as much work as it deserves!".
      Instead, RdrName.pickGREs makes the Internal names shadow External ones.
    
    * I moved the checkThLocalName cross-stage test to finishHsVar; previously
      we weren't doing the test at all in the OpApp case!
    
    * Quite a few changes (shortening the code) in the cross-stage checking code
      in TcExpr and RnSplice, notably to move the keepAlive call to the renamer
    
    One leftover piece:
    
    * In TcEnv I removed tcExtendGhciEnv and refactored
      tcExtendGlobalTyVars; this is really related to the next commit, but
      it was too hard to disentangle.


>---------------------------------------------------------------

7881488201629aa1ab36e3e0fbeb4d7b4b85bd91
 compiler/basicTypes/RdrName.lhs      |   85 +++++++++++-------
 compiler/rename/RnEnv.lhs            |   52 ++++++-----
 compiler/rename/RnExpr.lhs           |   17 ++--
 compiler/rename/RnNames.lhs          |   73 +++++++---------
 compiler/rename/RnPat.lhs            |    8 +-
 compiler/rename/RnSource.lhs         |   11 ++-
 compiler/rename/RnSplice.lhs         |  159 ++++++++++++++++++++++------------
 compiler/rename/RnSplice.lhs-boot    |    1 -
 compiler/typecheck/TcAnnotations.lhs |    9 +-
 compiler/typecheck/TcEnv.lhs         |  145 ++++++++++++++-----------------
 compiler/typecheck/TcExpr.lhs        |   55 +++++-------
 compiler/typecheck/TcRnDriver.lhs    |    4 +-
 compiler/typecheck/TcRnMonad.lhs     |   25 +++---
 compiler/typecheck/TcRnTypes.lhs     |   36 ++++----
 compiler/typecheck/TcSplice.lhs      |   47 ++--------
 compiler/typecheck/TcTyClsDecls.lhs  |    8 +-
 16 files changed, 380 insertions(+), 355 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 7881488201629aa1ab36e3e0fbeb4d7b4b85bd91


More information about the ghc-commits mailing list