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

On branch  : 

http://hackage.haskell.org/trac/ghc/changeset/2ce8f69337514d51a69d8a9290db1715a5b0f992

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

commit 2ce8f69337514d51a69d8a9290db1715a5b0f992
Author: Max Bolingbroke <batterseapo...@hotmail.com>
Date:   Tue Nov 8 16:08:09 2011 +0000

    Add explicit Parent parameter

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

 .../supercompile/Supercompile/Drive/Process2.hs    |   31 +++++++++++---------
 1 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/compiler/supercompile/Supercompile/Drive/Process2.hs 
b/compiler/supercompile/Supercompile/Drive/Process2.hs
index 8a1513e..995f5a6 100644
--- a/compiler/supercompile/Supercompile/Drive/Process2.hs
+++ b/compiler/supercompile/Supercompile/Drive/Process2.hs
@@ -21,6 +21,7 @@ import Supercompile.Utilities
 import Id         (mkLocalId)
 import Name       (Name, mkSystemVarName)
 import FastString (mkFastString)
+import Util       (sndOf3)
 import CoreUtils  (mkPiTypes)
 import qualified State as State
 
@@ -219,10 +220,10 @@ liftCallCCReaderT call_cc f = ReaderT $ \r -> call_cc $ 
\c -> runReaderT r (f (R
 newtype RollbackScpM = RB { doRB :: forall c. LevelM (Deeds, Out FVedTerm) -> 
ProcessM c }
 
 
-type ProcessHistory = LinearHistory (State, RollbackScpM) -- TODO: 
GraphicalHistory
+type ProcessHistory = LinearHistory (Parent, State, RollbackScpM) -- TODO: 
GraphicalHistory
 
 pROCESS_HISTORY :: ProcessHistory
-pROCESS_HISTORY = mkLinearHistory (cofmap fst wQO)
+pROCESS_HISTORY = mkLinearHistory (cofmap sndOf3 wQO)
 
 type HistoryEnvM = (->) ProcessHistory
 
@@ -239,10 +240,12 @@ runHistoryThreadM :: HistoryThreadM a -> a
 runHistoryThreadM = flip State.evalState pROCESS_HISTORY
 
 
-terminateM :: State -> RollbackScpM -> a -> (State -> RollbackScpM -> ProcessM 
(ProcessHistory, a)) -> ProcessM a
-terminateM state rb k_continue k_stop = withHistory' $ \hist -> case terminate 
hist (state, rb) of
-    Continue hist'                   -> return (hist', k_continue)
-    Stop (shallow_state, shallow_rb) -> k_stop shallow_state shallow_rb
+type Parent = ()
+
+terminateM :: Parent -> State -> RollbackScpM -> (Parent -> a) -> (Parent -> 
State -> RollbackScpM -> ProcessM (ProcessHistory, a)) -> ProcessM a
+terminateM parent state rb k_continue k_stop = withHistory' $ \hist -> case 
terminate hist (parent, state, rb) of
+    Continue hist'                                   -> return (hist', 
k_continue parent)
+    Stop (shallow_parent, shallow_state, shallow_rb) -> k_stop shallow_parent 
shallow_state shallow_rb
   where
     withHistory' :: (ProcessHistory -> ProcessM (ProcessHistory, a)) -> 
ProcessM a
     withHistory' act = lift State.get >>= \hist -> act hist >>= \(hist', x) -> 
lift (State.put hist') >> return x
@@ -351,19 +354,19 @@ runScpM mx = mx >>= runDelayM eval_strat
                | otherwise = breadthFirst
 
 
-sc' :: State -> ProcessM (LevelM (Deeds, Out FVedTerm))
-sc' state = callCC (\k -> try (RB k))
+sc' :: Parent -> State -> ProcessM (LevelM (Deeds, Out FVedTerm))
+sc' parent state = callCC (\k -> try (RB k))
   where
     trce shallow_state = pprTraceSC "sc-stop" (pPrintFullState True 
shallow_state $$ pPrintFullState True state)
     try :: RollbackScpM -> ProcessM (LevelM (Deeds, Out FVedTerm))
-    try rb = terminateM state rb
-               (liftSpeculatedStateT speculated state $ \state' -> split 
(reduce state') (delayStateT (delayReaderT delay) . sc))
-               (\shallow_state shallow_rb -> trce shallow_state $ doRB 
shallow_rb (maybe (split shallow_state) id (generalise (mK_GENERALISER 
shallow_state state) shallow_state) (delayStateT (delayReaderT delay) . sc)))
+    try rb = terminateM parent state rb
+               (\parent -> liftSpeculatedStateT speculated state $ \state' -> 
split (reduce state') (delayStateT (delayReaderT delay) . sc parent))
+               (\shallow_parent shallow_state shallow_rb -> trce shallow_state 
$ doRB shallow_rb (maybe (split shallow_state) id (generalise (mK_GENERALISER 
shallow_state state) shallow_state) (delayStateT (delayReaderT delay) . sc 
shallow_parent)))
 
-sc :: State -> MemoT ProcessM (LevelM (Deeds, Out FVedTerm))
-sc = memo sc' . gc -- Garbage collection necessary because normalisation might 
have made some stuff dead
+sc :: Parent -> State -> MemoT ProcessM (LevelM (Deeds, Out FVedTerm))
+sc parent = memo (sc' parent) . gc -- Garbage collection necessary because 
normalisation might have made some stuff dead
 
 
 supercompile :: M.Map Var Term -> Term -> Term
-supercompile unfoldings e = fVedTermToTerm $ runHistoryThreadM $ runContT $ 
runMemoT $ runScpM $ liftM (runSpecT . runFulfilmentT . fmap snd) $ sc state
+supercompile unfoldings e = fVedTermToTerm $ runHistoryThreadM $ runContT $ 
runMemoT $ runScpM $ liftM (runSpecT . runFulfilmentT . fmap snd) $ sc () state
   where state = prepareTerm unfoldings e



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

Reply via email to