diff options
Diffstat (limited to 'engines/sci/engine/selector.cpp')
-rw-r--r-- | engines/sci/engine/selector.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp index 6196495954..1a63b4dee1 100644 --- a/engines/sci/engine/selector.cpp +++ b/engines/sci/engine/selector.cpp @@ -23,6 +23,7 @@ #include "sci/sci.h" #include "sci/engine/features.h" #include "sci/engine/kernel.h" +#include "sci/engine/scriptdebug.h" #include "sci/engine/state.h" #include "sci/engine/selector.h" @@ -246,8 +247,14 @@ reg_t readSelector(SegManager *segMan, reg_t object, Selector selectorId) { if (lookupSelector(segMan, object, selectorId, &address, NULL) != kSelectorVariable) return NULL_REG; - else - return *address.getPointer(segMan); + + if (g_sci->_debugState._activeBreakpointTypes & BREAK_SELECTORREAD) { + reg_t curValue = *address.getPointer(segMan); + debugPropertyAccess(segMan->getObject(object), object, 0, selectorId, + curValue, NULL_REG, segMan, BREAK_SELECTORREAD); + } + + return *address.getPointer(segMan); } #ifdef ENABLE_SCI32 @@ -271,6 +278,12 @@ void writeSelector(SegManager *segMan, reg_t object, Selector selectorId, reg_t error("Selector '%s' of object could not be written to. Address %04x:%04x, %s", g_sci->getKernel()->getSelectorName(selectorId).c_str(), PRINT_REG(object), origin.toString().c_str()); } + if (g_sci->_debugState._activeBreakpointTypes & BREAK_SELECTORWRITE) { + reg_t curValue = *address.getPointer(segMan); + debugPropertyAccess(segMan->getObject(object), object, 0, selectorId, + curValue, value, segMan, BREAK_SELECTORWRITE); + } + *address.getPointer(segMan) = value; #ifdef ENABLE_SCI32 updateInfoFlagViewVisible(segMan->getObject(object), address.varindex); |