From e4b3478d9905e42b96430fb311b92293f295fc78 Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Sat, 29 Jul 2017 19:33:56 -0500 Subject: SCI: Show inherited methods when viewing an object in the debugger --- engines/sci/engine/scriptdebug.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'engines/sci/engine/scriptdebug.cpp') diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index f31a43cec4..cfe0ebeb64 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -1194,10 +1194,22 @@ bool printObject(reg_t pos) { con->debugPrintf("\n"); } con->debugPrintf(" -- methods:\n"); - for (i = 0; i < obj->getMethodCount(); i++) { - reg_t fptr = obj->getFunction(i); - con->debugPrintf(" [%03x] %s = %04x:%04x\n", obj->getFuncSelector(i), g_sci->getKernel()->getSelectorName(obj->getFuncSelector(i)).c_str(), PRINT_REG(fptr)); - } + Common::Array foundMethods; + const Object *protoObj = obj; + do { + for (i = 0; i < protoObj->getMethodCount(); i++) { + const Selector selector = protoObj->getFuncSelector(i); + if (Common::find(foundMethods.begin(), foundMethods.end(), selector) == foundMethods.end()) { + reg_t fptr = protoObj->getFunction(i); + con->debugPrintf(" [%03x] ", selector); + if (protoObj != obj) { + con->debugPrintf("%s::", s->_segMan->getObjectName(protoObj->getPos())); + } + con->debugPrintf("%s = %04x:%04x\n", g_sci->getKernel()->getSelectorName(selector).c_str(), PRINT_REG(fptr)); + foundMethods.push_back(selector); + } + } + } while ((protoObj = s->_segMan->getObject(protoObj->getSuperClassSelector()))); Script *scr = s->_segMan->getScriptIfLoaded(pos.getSegment()); if (scr) -- cgit v1.2.3