Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : 

http://hackage.haskell.org/trac/ghc/changeset/9df69812193402b2fc4627cf52472d60cd9b2fc9

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

commit 9df69812193402b2fc4627cf52472d60cd9b2fc9
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Thu Apr 19 18:36:36 2012 +0100

    Experiment: allow common heap binders to clash with left/right heap binders

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

 compiler/supercompile/Supercompile/Drive/MSG.hs |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Drive/MSG.hs 
b/compiler/supercompile/Supercompile/Drive/MSG.hs
index f4de232..01daec6 100644
--- a/compiler/supercompile/Supercompile/Drive/MSG.hs
+++ b/compiler/supercompile/Supercompile/Drive/MSG.hs
@@ -104,7 +104,7 @@ data Pending = PendingVar      Var       Var
              | PendingTerm     AnnedTerm AnnedTerm
 
 data MSGState = MSGState {
-    msgInScopeSet            :: InScopeSet,                      -- We have to 
ensure all new vars are distinct from *each other* AND *top level vars*
+    msgInScopeSet            :: InScopeSet,                      -- We have to 
ensure all new vars introduced by MSG are distinct from each other
     msgKnownPendingVars      :: VarEnv (VarEnv Var),             -- INVARIANT: 
the "known" maps are inverse to the pending list,
     msgKnownPendingTypes     :: TypeMap (TypeMap TyVar),         -- except 
that PendingTerms are not recorded in a "known" map at all.
     msgKnownPendingCoercions :: CoercionMap (CoercionMap CoVar), -- We don't 
*want* them in one because we don't mant MSGing to increase work sharing!
@@ -267,7 +267,11 @@ msgWithReason {- mm -} (deeds_l, Heap h_l ids_l, k_l, 
qa_l) (deeds_r, Heap h_r i
     -- This was the source of a very confusing bug :-(
     let ids = ids_l `unionInScope` ids_r
         init_rn2 = mkRnEnv2 ids
-        msg_s = MSGState ids emptyVarEnv emptyTM emptyTM []
+        -- NB: I've started to use emptyInScopeSet here rather than ids. The 
effect this has is that variable names from ids_l
+        -- and ids_r will actually occur in the common heap. This is perfectly 
OK for our purposes because we never try to bind
+        -- names from the common and individual heaps at the same time. Doing 
this also helps debugging because we minimise
+        -- the creation of brand new names as far as possible.
+        msg_s = MSGState emptyInScopeSet emptyVarEnv emptyTM emptyTM []
     -- TODO: test for multiple solutions? Attempt to choose best?
     firstSuccess [ do ((qa, (k_l, k, k_r)), (rn_l, (h_l, heap, h_r), rn_r)) <- 
mres
                       return ((deeds_l, Heap h_l ids_l, rn_l, k_l), (heap, k, 
qa), (deeds_r, Heap h_r ids_r, rn_r, k_r))



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to