packages feed

haskell-debugger-0.12.0.0: hdb/Development/Debug/Adapter/Stepping.hs

module Development.Debug.Adapter.Stepping where

import DAP

import GHC.Debugger.Interface.Messages hiding (Command, Response)

import Development.Debug.Adapter
import Development.Debug.Adapter.Interface
import Development.Debug.Adapter.Evaluation

commandContinue :: DebugAdaptor ()
commandContinue = do
  resetObjectReferences
  DidContinue er <- sendInterleaved DoContinue $
    sendContinueResponse (ContinueResponse True)
  handleEvalResult False er

commandNext :: DebugAdaptor ()
commandNext = do
  resetObjectReferences
  DidStep er <- sendInterleaved DoStepLocal sendNextResponse
  handleEvalResult True er

commandStepIn :: DebugAdaptor ()
commandStepIn = do
  resetObjectReferences
  DidStep er <- sendInterleaved DoSingleStep sendStepInResponse
  handleEvalResult True er

commandStepOut :: DebugAdaptor ()
commandStepOut = do
  resetObjectReferences
  DidStep er <- sendInterleaved DoStepOut sendStepOutResponse
  handleEvalResult True er

--------------------------------------------------------------------------------

-- | See "Lifetime of Objects References" in DAP specification.
resetObjectReferences :: DebugAdaptor ()
resetObjectReferences = do
  updateDebugSession $ \s ->
    s { stackFrameMap = mempty
      , breakpointMap = mempty
      , variablesMap  = mempty
      }