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

On branch  : 

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

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

commit e524ff35e5863b6ec5ff6dcb685efcc91f94e482
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Wed Apr 18 18:23:19 2012 +0100

    Ensure we add renamings to both sides when MSGing lambda bound heap bindings

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

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

diff --git a/compiler/supercompile/Supercompile/Drive/MSG.hs 
b/compiler/supercompile/Supercompile/Drive/MSG.hs
index afde468..7927544 100644
--- a/compiler/supercompile/Supercompile/Drive/MSG.hs
+++ b/compiler/supercompile/Supercompile/Drive/MSG.hs
@@ -482,8 +482,11 @@ msgPureHeap {- mm -} rn2 msg_s init_h_l init_h_r (k_bvs_l, 
k_fvs_l) (k_bvs_r, k_
                                   (Just Nothing, Just Nothing)
                                     | x_l == x_r
                                     -> return (msg_s, hb_r) -- Right biased
-                                  (Nothing, Nothing)
-                                    -> return (msg_s, lambdaBound)
+                                  -- NB: we reject two lambda bound things as 
not matching so that we go into the "generalise"
+                                  -- code path. By doing it this way, we 
ensure we not only add the common lambdaBound heap binding,
+                                  -- but also appropriate renamings to both 
rn_l and rn_r.
+                                  --(Nothing, Nothing)
+                                  --  -> return (msg_s, lambdaBound)
                                   _ -> Left "msgPureHeap: non-unifiable heap 
bindings"
                  -- If they match, we need to make a common heap binding
                  return (go rn_l rn_r used_l' used_r'
@@ -494,7 +497,7 @@ msgPureHeap {- mm -} rn2 msg_s init_h_l init_h_r (k_bvs_l, 
k_fvs_l) (k_bvs_r, k_
                  (used_l', h_l') <- mb_individual_l >>= suck init_h_l k_bvs_l 
h_l x_l
                  (used_r', h_r') <- mb_individual_r >>= suck init_h_r k_bvs_r 
h_r x_r
                  return $ go (M.insert x_common x_l rn_l) (M.insert x_common 
x_r rn_r) used_l' used_r'
-                              h_l' h_r' (M.insert x_common lambdaBound h) 
msg_s)
+                             h_l' h_r' (M.insert x_common lambdaBound h) msg_s)
       | otherwise
       = [Left "msgPureHeap: non-unifiable heap binders"]
       where



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

Reply via email to