[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