[Scummvm-cvs-logs] SF.net SVN: scummvm:[49031] scummvm/trunk/engines/sci/engine
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Fri May 14 17:23:42 CEST 2010
Revision: 49031
http://scummvm.svn.sourceforge.net/scummvm/?rev=49031&view=rev
Author: thebluegr
Date: 2010-05-14 15:23:42 +0000 (Fri, 14 May 2010)
Log Message:
-----------
Made locateVarSelector() a method of the Object class
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/segment.cpp
scummvm/trunk/engines/sci/engine/segment.h
scummvm/trunk/engines/sci/engine/selector.cpp
Modified: scummvm/trunk/engines/sci/engine/segment.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.cpp 2010-05-14 15:21:00 UTC (rev 49030)
+++ scummvm/trunk/engines/sci/engine/segment.cpp 2010-05-14 15:23:42 UTC (rev 49031)
@@ -674,6 +674,33 @@
//-------------------- hunk --------------------
+//-------------------- object ----------------------------
+
+Object *Object::getClass(SegManager *segMan) {
+ return isClass() ? this : segMan->getObject(getSuperClassSelector());
+}
+
+int Object::locateVarSelector(SegManager *segMan, Selector slc) {
+ byte *buf;
+ uint varnum;
+
+ if (getSciVersion() < SCI_VERSION_1_1) {
+ varnum = getVarCount();
+ int selector_name_offset = varnum * 2 + SCRIPT_SELECTOR_OFFSET;
+ buf = _baseObj + selector_name_offset;
+ } else {
+ Object *obj = getClass(segMan);
+ varnum = obj->getVariable(1).toUint16();
+ buf = (byte *)obj->_baseVars;
+ }
+
+ for (uint i = 0; i < varnum; i++)
+ if (READ_LE_UINT16(buf + (i << 1)) == slc) // Found it?
+ return i; // report success
+
+ return -1; // Failed
+}
+
//-------------------- dynamic memory --------------------
reg_t DynMem::findCanonicAddress(SegManager *segMan, reg_t addr) {
Modified: scummvm/trunk/engines/sci/engine/segment.h
===================================================================
--- scummvm/trunk/engines/sci/engine/segment.h 2010-05-14 15:21:00 UTC (rev 49030)
+++ scummvm/trunk/engines/sci/engine/segment.h 2010-05-14 15:23:42 UTC (rev 49031)
@@ -254,7 +254,14 @@
return -1;
}
+ /**
+ * Determines if the object explicitly defines slc as a varselector
+ * Returns -1 if not found
+ */
+ int locateVarSelector(SegManager *segMan, Selector slc);
+
bool isClass() { return (getInfoSelector().offset & SCRIPT_INFO_CLASS); }
+ Object *getClass(SegManager *segMan);
void markAsFreed() { _flags |= OBJECT_FLAG_FREED; }
bool isFreed() { return _flags & OBJECT_FLAG_FREED; }
Modified: scummvm/trunk/engines/sci/engine/selector.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/selector.cpp 2010-05-14 15:21:00 UTC (rev 49030)
+++ scummvm/trunk/engines/sci/engine/selector.cpp 2010-05-14 15:23:42 UTC (rev 49031)
@@ -258,31 +258,6 @@
return retval;
}
-static int _obj_locate_varselector(SegManager *segMan, Object *obj, Selector slc) {
- // Determines if obj explicitly defines slc as a varselector
- // Returns -1 if not found
- byte *buf;
- uint varnum;
-
- if (getSciVersion() < SCI_VERSION_1_1) {
- varnum = obj->getVarCount();
- int selector_name_offset = varnum * 2 + SCRIPT_SELECTOR_OFFSET;
- buf = obj->_baseObj + selector_name_offset;
- } else {
- if (!(obj->getInfoSelector().offset & SCRIPT_INFO_CLASS))
- obj = segMan->getObject(obj->getSuperClassSelector());
-
- buf = (byte *)obj->_baseVars;
- varnum = obj->getVariable(1).toUint16();
- }
-
- for (uint i = 0; i < varnum; i++)
- if (READ_LE_UINT16(buf + (i << 1)) == slc) // Found it?
- return i; // report success
-
- return -1; // Failed
-}
-
SelectorType lookup_selector(SegManager *segMan, reg_t obj_location, Selector selector_id, ObjVarRef *varp, reg_t *fptr) {
Object *obj = segMan->getObject(obj_location);
int index;
@@ -298,7 +273,7 @@
PRINT_REG(obj_location));
}
- index = _obj_locate_varselector(segMan, obj, selector_id);
+ index = obj->locateVarSelector(segMan, selector_id);
if (index >= 0) {
// Found it as a variable
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list