[commit: ghc] supercompiler: Don't lose deeds when the evaluator builds a term from a bare Var (ffa5c71)

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/ffa5c713527084a208ac254b0a7e067170bc68a5

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

commit ffa5c713527084a208ac254b0a7e067170bc68a5
Author: Max Bolingbroke <[email protected]>
Date:   Wed Jul 27 19:19:52 2011 +0100

    Don't lose deeds when the evaluator builds a term from a bare Var

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

 compiler/supercompile/Supercompile/Core/Size.hs    |   24 +++++++------------
 .../Supercompile/Evaluator/Evaluate.hs             |    2 +-
 .../supercompile/Supercompile/Evaluator/Syntax.hs  |    4 ---
 3 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Core/Size.hs b/compiler/supercompile/Supercompile/Core/Size.hs
index 3b2d050..a2e1ba4 100644
--- a/compiler/supercompile/Supercompile/Core/Size.hs
+++ b/compiler/supercompile/Supercompile/Core/Size.hs
@@ -19,30 +19,27 @@ type TaggedSizedFVedAlt = AltF (O Tagged (O Sized FVed))
 type TaggedSizedFVedValue = ValueF (O Tagged (O Sized FVed))
 
 
-(varSize',                termSize,                termSize',                altsSize,                valueSize,                valueSize')                = mkSize (\f (I e) -> f e)
-(fvedVarSize',            fvedTermSize,            fvedTermSize',            fvedAltsSize,            fvedValueSize,            fvedValueSize')            = mkSize (\f (FVed _ e) -> f e)
-(sizedVarSize',           sizedTermSize,           sizedTermSize',           sizedAltsSize,           sizedValueSize,           sizedValueSize')           = mkSize (\_ (Sized sz _) -> sz)
-(sizedFVedVarSize',       sizedFVedTermSize,       sizedFVedTermSize',       sizedFVedAltsSize,       sizedFVedValueSize,       sizedFVedValueSize')       = mkSize (\_ (Comp (Sized sz (FVed _ _))) -> sz)
-(taggedSizedFVedVarSize', taggedSizedFVedTermSize, taggedSizedFVedTermSize', taggedSizedFVedAltsSize, taggedSizedFVedValueSize, taggedSizedFVedValueSize') = mkSize (\_ (Comp (Tagged _ (Comp (Sized sz (FVed _ _))))) -> sz)
+(termSize,                termSize',                altsSize,                valueSize,                valueSize')                = mkSize (\f (I e) -> f e)
+(fvedTermSize,            fvedTermSize',            fvedAltsSize,            fvedValueSize,            fvedValueSize')            = mkSize (\f (FVed _ e) -> f e)
+(sizedTermSize,           sizedTermSize',           sizedAltsSize,           sizedValueSize,           sizedValueSize')           = mkSize (\_ (Sized sz _) -> sz)
+(sizedFVedTermSize,       sizedFVedTermSize',       sizedFVedAltsSize,       sizedFVedValueSize,       sizedFVedValueSize')       = mkSize (\_ (Comp (Sized sz (FVed _ _))) -> sz)
+(taggedSizedFVedTermSize, taggedSizedFVedTermSize', taggedSizedFVedAltsSize, taggedSizedFVedValueSize, taggedSizedFVedValueSize') = mkSize (\_ (Comp (Tagged _ (Comp (Sized sz (FVed _ _))))) -> sz)
 
 {-# INLINE mkSize #-}
 mkSize :: (forall a. (a -> Size) -> ann a -> Size)
-       -> (Var              -> Size,
-           ann (TermF ann)  -> Size,
+       -> (ann (TermF ann)  -> Size,
            TermF ann        -> Size,
            [AltF ann]       -> Size,
            ann (ValueF ann) -> Size,
            ValueF ann       -> Size)
-mkSize rec = (var', term, term', alternatives, value, value')
+mkSize rec = (term, term', alternatives, value, value')
   where
-    var' = const 0
-    
     term = rec term'
     term' e = 1 + case e of
-        Var x           -> var' x
+        Var _           -> 0
         Value v         -> value' v - 1 -- Slight hack here so that we don't get +2 size on values
         TyApp e _       -> term e
-        App e x         -> term e + var' x
+        App e _         -> term e
         PrimOp _ _ es   -> sum (map term es)
         Case e _ _ alts -> term e + alternatives alts
         Let _ e1 e2     -> term e1 + term e2
@@ -74,9 +71,6 @@ instance Symantics (O Sized FVed) where
     letRec xes = sizedFVedTerm . LetRec xes
     cast e = sizedFVedTerm . Cast e
 
-sizedFVedVar :: Var -> (O Sized FVed) Var
-sizedFVedVar x = Comp (Sized (sizedFVedVarSize' x) (FVed (sizedFVedVarFreeVars' x) x))
-
 sizedFVedValue :: SizedFVedValue -> (O Sized FVed) SizedFVedValue
 sizedFVedValue v = Comp (Sized (sizedFVedValueSize' v) (FVed (sizedFVedValueFreeVars' v) v))
 
diff --git a/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs b/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
index 5583ae3..77c8301 100644
--- a/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
+++ b/compiler/supercompile/Supercompile/Evaluator/Evaluate.hs
@@ -89,7 +89,7 @@ step' normalising state =
     go (deeds, heap@(Heap h ids), k, (rn, e)) 
      | Just anned_a <- termToAnswer ids (rn, e) = go_answer (deeds, heap, k, anned_a)
      | otherwise = case annee e of
-        Var x            -> go_question (deeds, heap, k, annedVar (annedTag e) (renameId rn x))
+        Var x            -> go_question (deeds, heap, k, fmap (\(rn, Var _) -> renameId rn x) (renameAnned (rn, e)))
         Value v          -> pprPanic "step': values are always answers" (ppr v)
         TyApp e ty       -> go (deeds, heap,        Tagged tg (TyApply (renameType ids rn ty))                                   : k, (rn, e))
         App e x          -> go (deeds, heap,        Tagged tg (Apply (renameId rn x))                                            : k, (rn, e))
diff --git a/compiler/supercompile/Supercompile/Evaluator/Syntax.hs b/compiler/supercompile/Supercompile/Evaluator/Syntax.hs
index 515e8ca..686bac5 100644
--- a/compiler/supercompile/Supercompile/Evaluator/Syntax.hs
+++ b/compiler/supercompile/Supercompile/Evaluator/Syntax.hs
@@ -54,7 +54,6 @@ annedValueFreeVars = taggedSizedFVedValueFreeVars
 annedValueFreeVars' = taggedSizedFVedValueFreeVars'
 annedAltsFreeVars = taggedSizedFVedAltsFreeVars
 
-annedVarSize' = taggedSizedFVedVarSize'
 annedTermSize' = taggedSizedFVedTermSize'
 annedTermSize = taggedSizedFVedTermSize
 annedValueSize' = taggedSizedFVedValueSize'
@@ -73,9 +72,6 @@ detagAnnedValue' = taggedSizedFVedValue'ToFVedValue'
 detagAnnedAlts = taggedSizedFVedAltsToFVedAlts
 
 
-annedVar :: Tag -> Var -> Anned Var
-annedVar   tg x = Comp (Tagged tg (Comp (Sized (annedVarSize' x)   (FVed (annedVarFreeVars' x)  x))))
-
 annedTerm :: Tag -> TermF Anned -> AnnedTerm
 annedTerm  tg e = Comp (Tagged tg (Comp (Sized (annedTermSize' e)  (FVed (annedTermFreeVars' e)  e))))
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.