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

On branch  : 

http://hackage.haskell.org/trac/ghc/changeset/4c432616b7f1244f03c15d9c4718e37ac8880ff2

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

commit 4c432616b7f1244f03c15d9c4718e37ac8880ff2
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Mon Aug 1 09:35:48 2011 +0100

    sc-rollback was totally busted in my porting effort

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

 .../supercompile/Supercompile/Drive/Process.hs     |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Drive/Process.hs 
b/compiler/supercompile/Supercompile/Drive/Process.hs
index 5fcfba2..b1c2913 100644
--- a/compiler/supercompile/Supercompile/Drive/Process.hs
+++ b/compiler/supercompile/Supercompile/Drive/Process.hs
@@ -515,18 +515,19 @@ addStats :: SCStats -> ScpM ()
 addStats scstats = ScpM $ \_e s k -> k () (let scstats' = stats s `mappend` 
scstats in scstats' `seqSCStats` s { stats = scstats' })
 
 
-type RollbackScpM = (State, State) -> ScpM (Deeds, Out FVedTerm)
+type RollbackScpM = Generaliser -> ScpM (Deeds, Out FVedTerm)
 
 sc  :: History (State, RollbackScpM) -> AlreadySpeculated -> State -> ScpM 
(Deeds, Out FVedTerm)
 sc' :: History (State, RollbackScpM) -> AlreadySpeculated -> State -> ScpM 
(Deeds, Out FVedTerm)
 sc  hist = rollbackBig (memo (sc' hist))
-sc' hist speculated state = (\raise -> check raise) `catchScpM` \(old_state, 
state) -> stop old_state state hist -- TODO: I want to use the original history 
here, but I think doing so leads to non-term as it contains rollbacks from 
"below us" (try DigitsOfE2)
+sc' hist speculated state = (\raise -> check raise) `catchScpM` \gen -> stop 
gen state hist -- TODO: I want to use the original history here, but I think 
doing so leads to non-term as it contains rollbacks from "below us" (try 
DigitsOfE2)
   where
     check this_rb = case terminate hist (state, this_rb) of
                       Continue hist' -> continue hist'
-                      Stop (old_state, rb) -> maybe (stop old_state state 
hist) ($ (old_state, state)) $ guard sC_ROLLBACK >> Just rb
-    stop old_state state hist = do addStats $ mempty { stat_sc_stops = 1 }
-                                   maybe (trace "sc-stop: no generalisation" $ 
split state) (trace "sc-stop: generalisation") (generalise (mK_GENERALISER 
old_state state) state) (sc hist speculated) -- Keep the trace exactly here or 
it gets floated out by GHC
+                      Stop (shallower_state, rb) -> maybe (stop gen state 
hist) ($ gen) $ guard sC_ROLLBACK >> Just rb
+                        where gen = mK_GENERALISER shallower_state state
+    stop gen state hist = do addStats $ mempty { stat_sc_stops = 1 }
+                             maybe (trace "sc-stop: no generalisation" $ split 
state) (trace "sc-stop: generalisation") (generalise gen state) (sc hist 
speculated) -- Keep the trace exactly here or it gets floated out by GHC
     continue hist = do traceRenderScpM "reduce end (continue)" (PrettyDoc 
(pPrintFullState state'))
                        addStats stats
                        split state' (sc hist speculated')



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

Reply via email to