aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/selector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/selector.cpp')
-rw-r--r--engines/sci/engine/selector.cpp17
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);