[commit: ghc] supercompiler: Instantiating with a stack frame *is* real instantiation (e2c9fc7)

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

On branch  : supercompiler

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

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

commit e2c9fc779cc7b32afe1c2680e8692ab27af78f41
Author: Max Bolingbroke <[email protected]>
Date:   Wed Jul 4 18:15:02 2012 +0100

    Instantiating with a stack frame *is* real instantiation

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

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

diff --git a/compiler/supercompile/Supercompile/Drive/MSG.hs b/compiler/supercompile/Supercompile/Drive/MSG.hs
index a982aab..aa193f8 100644
--- a/compiler/supercompile/Supercompile/Drive/MSG.hs
+++ b/compiler/supercompile/Supercompile/Drive/MSG.hs
@@ -439,7 +439,7 @@ msgMatch inst_mtch ((_, Heap h_l _, rn_l, k_l), (heap@(Heap _ ids), k, qa), (dee
   --     ones are only matched against heap-bound ones, and we don't have any generalisation flag to check on update frames.
   , let k_r_bvs = stackBoundVars k_r
         heap_non_instantiating x_r = case M.lookup x_r h_r of
-                         Nothing | x_r `elemVarSet` k_r_bvs -> True -- Instantiating with an update-frame bound thing is *probably* OK
+                         Nothing | x_r `elemVarSet` k_r_bvs -> False -- Instantiating with an update-frame bound thing is *not* OK, especially since this might be a leading update frame with a value in the focus!
                          Just hb_r -> isJust (heapBindingLambdaBoundness hb_r)
                          _ -> panic "msgMatch: variable unbound on right" -- (ppr rn_l_inv $$ ppr x_r $$ pPrintFullState fullStatePrettiness (maxBound, heap, k, qa) $$ ppr (h_l, rn_l, k_l) $$ ppr (h_r, rn_r, k_r))
   -- NB: just because we have (x_l, hb_l) in the heap *DOESN'T MEAN* there is a x/x_r corresponding to this x_l because we might have:
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.