Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch :
http://hackage.haskell.org/trac/ghc/changeset/bd1cc0325e276a098ca5ee3bb1a6703653071385 >--------------------------------------------------------------- commit bd1cc0325e276a098ca5ee3bb1a6703653071385 Author: Max Bolingbroke <batterseapo...@hotmail.com> Date: Mon Sep 12 17:37:24 2011 +0100 Fill in pretty-printer >--------------------------------------------------------------- .../supercompile/Supercompile/Drive/Process.hs | 47 +++++++++++++++++--- 1 files changed, 41 insertions(+), 6 deletions(-) diff --git a/compiler/supercompile/Supercompile/Drive/Process.hs b/compiler/supercompile/Supercompile/Drive/Process.hs index e2989dd..fd8d524 100644 --- a/compiler/supercompile/Supercompile/Drive/Process.hs +++ b/compiler/supercompile/Supercompile/Drive/Process.hs @@ -41,6 +41,8 @@ import qualified State as State import State hiding (State, mapAccumLM) import BasicTypes (OccInfo(..)) +import Text.XHtml hiding (text) + import qualified Control.Monad as Monad import qualified Data.Foldable as Foldable import qualified Data.Traversable as Traversable @@ -49,6 +51,8 @@ import Data.Monoid import Data.Ord import qualified Data.Set as S +import System.IO.Unsafe (unsafePerformIO) + import Prelude hiding (Monad(..)) @@ -585,7 +589,7 @@ instance IMonad ScpM where (!mx) >>= fxmy = ScpM $ \e s k -> unScpM mx e s (\x s -> unScpM (fxmy x) e s k) runScpM :: ScpPM (Out FVedTerm) -> (SCStats, Out FVedTerm) -runScpM me = unScpM me init_e init_s (\e' s -> (stats s, bindManyMixedLiftedness fvedTermFreeVars (fulfilmentsToBinds $ fst $ partitionFulfilments fulfilmentReferredTo unionVarSets (fvedTermFreeVars e') (pTreeHole s)) e')) +runScpM me = unScpM (tracePprScpPM me) init_e init_s (\e' s -> (stats s, bindManyMixedLiftedness fvedTermFreeVars (fulfilmentsToBinds $ fst $ partitionFulfilments fulfilmentReferredTo unionVarSets (fvedTermFreeVars e') (pTreeHole s)) e')) where init_e = ScpEnv { pTreeContext = [], depth = 0 } init_s = ScpState { names = h_names, pTreeHole = (), stats = mempty } @@ -622,13 +626,36 @@ addStats scstats = ScpM $ \_e s k -> k () (let scstats' = stats s `mappend` scst type PrettyTree = PTree (Var, SDoc, Maybe SDoc) -pprScpM :: ScpBM SDoc -pprScpM = ScpM $ \e s k -> k (pprTrees (unwindContext (pTreeContext e) (map unwindTree (pTreeHole s)))) s +tracePprScpPM :: ScpPM a -> ScpPM a +tracePprScpPM mx = do + x <- mx + s <- pprScpPM + unsafePerformIO (writeFile "sc.htm" s Monad.>> Monad.return (return x)) + -- pprTraceSC "tracePprScpM" (text s) $ return x + +pprScpBM :: ScpBM String +pprScpPM :: ScpM FulfilmentTree FulfilmentTree String +(pprScpBM, pprScpPM) = (go (map unwindTree), go (\t -> [unwindTree t])) where + go :: forall f. (f -> [PrettyTree]) -> ScpM f f String + go xtract = ScpM $ \e s k -> k (html (pTreeContext e) (xtract (pTreeHole s))) s + + html ctxt hole = show $ thehtml $ toHtmlFromList + [header (toHtmlFromList [thetitle (stringToHtml "Supercompilation"), + script mempty ! [thetype "text/javascript", src "http://www.omega-prime.co.uk/files/chsc/jquery-1.6.3.min.js"], + script mempty ! [thetype "text/javascript", src "http://www.omega-prime.co.uk/files/chsc/jstree_pre1.0_fix_1/jquery.jstree.js"], + script js]), + body (toHtmlFromList [thediv htm ! [identifier "tree"], + pre mempty ! [identifier "content-in"], + pre mempty ! [identifier "content-out"]])] + where htm = pprTrees (unwindContext ctxt hole) + -- NB: must use primHtml so that entities in the script are not escaped + js = primHtml "$(function () { $(\"#tree\").jstree({ \"plugins\" : [\"themes\", \"html_data\"], \"core\" : { \"animation\" : 0 } }).bind(\"loaded.jstree\", function (event, data) { data.inst.open_all(-1, false); }); });" + unwindTree :: FulfilmentTree -> PrettyTree unwindTree = fmap unwindPromiseFulfilment - unwindPromiseFulfilment (p, f) = (fun p, ppr (meaning p), + unwindPromiseFulfilment (p, f) = (fun p, pPrintFullState (meaning p), case f of Captured -> Nothing RolledBack mb_e' -> fmap ppr mb_e' Fulfilled e' -> Just (ppr e')) @@ -640,8 +667,16 @@ pprScpM = ScpM $ \e s k -> k (pprTrees (unwindContext (pTreeContext e) (map unwi unwindContextItem (Promise p) ts = [Split True [(fun p, ppr (meaning p), Nothing)] ts] unwindContextItem (BindCapturedFloats fvs ts') ts = map unwindTree ts' ++ [BoundCapturedFloats fvs ts] - pprTrees :: [PrettyTree] -> SDoc - pprTrees = undefined + pprTrees :: [PrettyTree] -> Html + pprTrees ts = ulist $ toHtmlFromList $ map pprTree ts + + pprTree :: PrettyTree -> Html + pprTree t = li $ case t of + Tieback x -> anchor (stringToHtml ("Tieback " ++ show x)) ! [href ("#" ++ show x)] + Split rb fs ts -> toHtmlFromList ([thediv (anchor (stringToHtml (show x)) ! [strAttr "onclick" $ "document.getElementById(\"content-in\").innerText=" ++ show (showSDoc in_code) ++ ";document.getElementById(\"content-out\").innerText=" ++ show (maybe "" showSDoc mb_out_code) ++ ";return false"]) ! + [identifier (show x)] + | (x, in_code, mb_out_code) <- fs] ++ [pprTrees ts]) + BoundCapturedFloats fvs ts -> toHtmlFromList [stringToHtml ("Capture " ++ showSDoc (ppr fvs)), pprTrees ts] type RollbackScpM = Generaliser -> ScpBM (Deeds, Out FVedTerm) _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc