diff options
Diffstat (limited to 'engines/sci/engine/vm.cpp')
| -rw-r--r-- | engines/sci/engine/vm.cpp | 104 | 
1 files changed, 0 insertions, 104 deletions
| diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index b114af1034..be09cd5de0 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -1393,110 +1393,6 @@ void run_vm(EngineState *s, int restoring) {  	}  } -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->variable_names_nr; -		int selector_name_offset = varnum * 2 + SCRIPT_SELECTOR_OFFSET; -		buf = obj->base_obj + selector_name_offset; -	} else { -		if (!(obj->getInfoSelector().offset & SCRIPT_INFO_CLASS)) -			obj = segMan->getObject(obj->getSuperClassSelector()); - -		buf = (byte *)obj->base_vars; -		varnum = obj->_variables[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 -} - -static int _class_locate_funcselector(Object *obj, Selector slc) { -	// Determines if obj is a class and explicitly defines slc as a funcselector -	// Does NOT say anything about obj's superclasses, i.e. failure may be -	// returned even if one of the superclasses defines the funcselector. -	int funcnum = obj->methods_nr; -	int i; - -	for (i = 0; i < funcnum; i++) -		if (obj->getFuncSelector(i) == slc) // Found it? -			return i; // report success - -	return -1; // Failed -} - -static SelectorType _lookup_selector_function(SegManager *segMan, int seg_id, Object *obj, Selector selector_id, reg_t *fptr) { -	int index; - -	// "recursive" lookup - -	while (obj) { -		index = _class_locate_funcselector(obj, selector_id); - -		if (index >= 0) { -			if (fptr) { -				*fptr = obj->getFunction(index); -			} - -			return kSelectorMethod; -		} else { -			seg_id = obj->getSuperClassSelector().segment; -			obj = segMan->getObject(obj->getSuperClassSelector()); -		} -	} - -	return kSelectorNone; -} - -SelectorType lookup_selector(SegManager *segMan, reg_t obj_location, Selector selector_id, ObjVarRef *varp, reg_t *fptr) { -	Object *obj = segMan->getObject(obj_location); -	Object *species; -	int index; -	bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); - -	// Early SCI versions used the LSB in the selector ID as a read/write -	// toggle, meaning that we must remove it for selector lookup. -	if (oldScriptHeader) -		selector_id &= ~1; - -	if (!obj) { -		error("lookup_selector(): Attempt to send to non-object or invalid script. Address was %04x:%04x",  -				PRINT_REG(obj_location)); -	} - -	if (obj->isClass()) -		species = obj; -	else -		species = segMan->getObject(obj->getSpeciesSelector()); - - -	if (!obj) { -		error("lookup_selector(): Error while looking up Species class.\nOriginal address was %04x:%04x. Species address was %04x:%04x",  -			PRINT_REG(obj_location), PRINT_REG(obj->getSpeciesSelector())); -		return kSelectorNone; -	} - -	index = _obj_locate_varselector(segMan, obj, selector_id); - -	if (index >= 0) { -		// Found it as a variable -		if (varp) { -			varp->obj = obj_location; -			varp->varindex = index; -		} -		return kSelectorVariable; -	} - -	return _lookup_selector_function(segMan, obj_location.segment, obj, selector_id, fptr); -} -  #define INST_LOOKUP_CLASS(id) ((id == 0xffff)? NULL_REG : segMan->getClassAddress(id, SCRIPT_GET_LOCK, reg))  int script_instantiate_common(ResourceManager *resMan, SegManager *segMan, int script_nr, Resource **script, Resource **heap, int *was_new) { | 
