diff options
| author | Filippos Karapetis | 2010-10-20 17:31:29 +0000 |
|---|---|---|
| committer | Filippos Karapetis | 2010-10-20 17:31:29 +0000 |
| commit | 3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d (patch) | |
| tree | 5cdb3d4a52cd6cc932e13b84e22958d03df48ece /engines/sci/engine | |
| parent | 64c0d2a1d1f2b2688e86092834f2e559c437cd29 (diff) | |
| download | scummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.tar.gz scummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.tar.bz2 scummvm-rg350-3d85d6804bb13a8cd2822b771aa2e6d4c8276a1d.zip | |
SCI: Added a new debug command, "find_callk"
This command can be used to find the object methods (including their
corresponding objects and owner scripts) that call a specific kernel
call. This shall aid us track all the spots where a particular kernel
function is called from, therefore it'll be a bit easier to find
examples where unimplemented kernel functions are called
svn-id: r53646
Diffstat (limited to 'engines/sci/engine')
| -rw-r--r-- | engines/sci/engine/kernel.cpp | 8 | ||||
| -rw-r--r-- | engines/sci/engine/kernel.h | 1 | ||||
| -rw-r--r-- | engines/sci/engine/segment.h | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index ff327a0049..b1ee6abaff 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -88,6 +88,14 @@ const Common::String &Kernel::getKernelName(uint number) const { return _kernelNames[number]; } +int Kernel::findKernelFuncPos(Common::String kernelFuncName) { + for (uint32 i = 0; i < _kernelNames.size(); i++) + if (_kernelNames[i] == kernelFuncName) + return i; + + return -1; +} + int Kernel::findSelector(const char *selectorName) const { for (uint pos = 0; pos < _selectorNames.size(); ++pos) { if (_selectorNames[pos] == selectorName) diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index e50c6aaae2..9833f91a5e 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -151,6 +151,7 @@ public: uint getSelectorNamesSize() const; const Common::String &getSelectorName(uint selector); + int findKernelFuncPos(Common::String kernelFuncName); uint getKernelNamesSize() const; const Common::String &getKernelName(uint number) const; diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index 6eca708e2e..99a41137e9 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -246,7 +246,7 @@ public: reg_t getInfoSelector() const { return _variables[_offset + 2]; } void setInfoSelector(reg_t value) { _variables[_offset + 2] = value; } - reg_t getNameSelector() const { return _variables[_offset + 3]; } + reg_t getNameSelector() const { return _offset + 3 < (uint16)_variables.size() ? _variables[_offset + 3] : NULL_REG; } void setNameSelector(reg_t value) { _variables[_offset + 3] = value; } reg_t getPropDictSelector() const { return _variables[2]; } |
