[commit: ghc] master: Major refactoring of the way that UNPACK pragmas are handled (faa8ff4)

Simon Peyton Jones <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/faa8ff40162da23a57b58fc128b0d672a8107a46

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

commit faa8ff40162da23a57b58fc128b0d672a8107a46
Author: Simon Peyton Jones <[email protected]>
Date:   Fri Dec 14 17:37:25 2012 +0000

    Major refactoring of the way that UNPACK pragmas are handled
    
    The situation was pretty dire.  The way in which data constructors
    were handled, notably the mapping between their *source* argument types
    and their *representation* argument types (after seq'ing and unpacking)
    was scattered in three different places, and hard to keep in sync.
    
    Now it is all in one place:
    
     * The dcRep field of a DataCon gives its representation,
       specified by a DataConRep
    
     * As well as having the wrapper, the DataConRep has a "boxer"
       of type DataConBoxer (defined in MkId for loopy reasons).
       The boxer used at a pattern match to reconstruct the source-level
       arguments from the rep-level bindings in the pattern match.
    
     * The unboxing in the wrapper and the boxing in the boxer are dual,
       and are now constructed together, by MkId.mkDataConRep. This is
       the key function of this change.
    
     * All the computeBoxingStrategy code in TcTyClsDcls disappears.
    
    Much nicer.
    
    There is a little bit of refactoring left to do; the strange
    deepSplitProductType functions are now called only in WwLib, so
    I moved them there, and I think they could be tidied up further.

 compiler/basicTypes/BasicTypes.lhs   |   27 +-
 compiler/basicTypes/DataCon.lhs      |  250 ++++++-------
 compiler/basicTypes/DataCon.lhs-boot |    3 +-
 compiler/basicTypes/MkId.lhs         |  652 +++++++++++++++++++---------------
 compiler/basicTypes/MkId.lhs-boot    |   10 +-
 compiler/deSugar/DsMeta.hs           |    6 +-
 compiler/deSugar/DsUtils.lhs         |   12 +-
 compiler/hsSyn/Convert.lhs           |    4 +-
 compiler/iface/BinIface.hs           |   19 +-
 compiler/iface/BuildTyCl.lhs         |    8 +-
 compiler/iface/MkIface.lhs           |    2 +-
 compiler/main/DynFlags.hs            |    2 +-
 compiler/parser/Parser.y.pp          |    2 +-
 compiler/prelude/TysWiredIn.lhs      |    8 +-
 compiler/stranal/WwLib.lhs           |   65 ++++-
 compiler/typecheck/TcInstDcls.lhs    |   11 +-
 compiler/typecheck/TcTyClsDecls.lhs  |  220 ++----------
 compiler/types/TyCon.lhs             |   37 +--
 18 files changed, 634 insertions(+), 704 deletions(-)


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

    git show faa8ff40162da23a57b58fc128b0d672a8107a46
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.