-ddump-eval
This commit is contained in:
@@ -187,9 +187,9 @@ prettyRlpcMsg m = render $ docRlpcErr m
|
|||||||
|
|
||||||
prettyRlpcDebugMsg :: MsgEnvelope RlpcError -> String
|
prettyRlpcDebugMsg :: MsgEnvelope RlpcError -> String
|
||||||
prettyRlpcDebugMsg msg =
|
prettyRlpcDebugMsg msg =
|
||||||
T.unpack . foldMap mkLine $ ts
|
T.unpack . foldMap mkLine $ [ t' | t <- ts, t' <- T.lines t ]
|
||||||
where
|
where
|
||||||
mkLine s = tag <> ": " <> s <> "\n"
|
mkLine s = "-d" <> tag <> ": " <> s <> "\n"
|
||||||
Text ts = msg ^. msgDiagnostic
|
Text ts = msg ^. msgDiagnostic
|
||||||
SevDebug tag = msg ^. msgSeverity
|
SevDebug tag = msg ^. msgSeverity
|
||||||
|
|
||||||
|
|||||||
17
src/GM.hs
17
src/GM.hs
@@ -8,6 +8,7 @@ Description : The G-Machine
|
|||||||
module GM
|
module GM
|
||||||
( hdbgProg
|
( hdbgProg
|
||||||
, evalProg
|
, evalProg
|
||||||
|
, evalProgR
|
||||||
, Node(..)
|
, Node(..)
|
||||||
, gmEvalProg
|
, gmEvalProg
|
||||||
, finalStateOf
|
, finalStateOf
|
||||||
@@ -34,6 +35,7 @@ import System.IO (Handle, hPutStrLn)
|
|||||||
import Data.String (IsString)
|
import Data.String (IsString)
|
||||||
import Data.Heap
|
import Data.Heap
|
||||||
import Debug.Trace
|
import Debug.Trace
|
||||||
|
import Compiler.RLPC
|
||||||
import Core2Core
|
import Core2Core
|
||||||
import Core
|
import Core
|
||||||
----------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------
|
||||||
@@ -156,6 +158,21 @@ hdbgProg p hio = do
|
|||||||
[resAddr] = final ^. gmStack
|
[resAddr] = final ^. gmStack
|
||||||
res = hLookupUnsafe resAddr h
|
res = hLookupUnsafe resAddr h
|
||||||
|
|
||||||
|
evalProgR :: (Monad m) => Program' -> RLPCT m (Node, Stats)
|
||||||
|
evalProgR p = do
|
||||||
|
(renderOut . showState) `traverse_` states
|
||||||
|
renderOut . showStats $ sts
|
||||||
|
pure (res, sts)
|
||||||
|
where
|
||||||
|
renderOut r = addDebugMsg "dump-eval" $ render r ++ "\n"
|
||||||
|
states = eval . compile $ p
|
||||||
|
final = last states
|
||||||
|
|
||||||
|
sts = final ^. gmStats
|
||||||
|
-- the address of the result should be the one and only stack entry
|
||||||
|
[resAddr] = final ^. gmStack
|
||||||
|
res = hLookupUnsafe resAddr (final ^. gmHeap)
|
||||||
|
|
||||||
eval :: GmState -> [GmState]
|
eval :: GmState -> [GmState]
|
||||||
eval st = st : rest
|
eval st = st : rest
|
||||||
where
|
where
|
||||||
|
|||||||
Reference in New Issue
Block a user