diff options
| author | Eugene Sandulenko | 2015-12-23 23:40:58 +0100 | 
|---|---|---|
| committer | Eugene Sandulenko | 2015-12-27 15:41:00 +0100 | 
| commit | 88faad5d08bc10272f04ebc1ce122b8b446d31a8 (patch) | |
| tree | 4751f8d757b7b1b5ccae92f8025f38b2aba967e1 | |
| parent | 870d6748fed63733a5a4f35b7e4485fb9cfcf56b (diff) | |
| download | scummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.tar.gz scummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.tar.bz2 scummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.zip | |
WAGE: Simplified code and avoid extra object allocations
| -rw-r--r-- | engines/wage/script.cpp | 43 | 
1 files changed, 25 insertions, 18 deletions
| diff --git a/engines/wage/script.cpp b/engines/wage/script.cpp index cb0710965e..5ef1b6e209 100644 --- a/engines/wage/script.cpp +++ b/engines/wage/script.cpp @@ -646,38 +646,45 @@ bool Script::eval(Operand *lhs, const char *op, Operand *rhs) {  		return result;  	} else {  		for (int cmp = 0; comparators[cmp].op != 0; cmp++) { -			if (comparators[cmp].op == op[0] && -				comparators[cmp].o1 == lhs->_type && comparators[cmp].o2 == rhs->_type) -					return compare(lhs, rhs, comparators[cmp].cmp); +			if (comparators[cmp].op != op[0]) +			 	continue; + +			if (comparators[cmp].o1 == lhs->_type && comparators[cmp].o2 == rhs->_type) +				return compare(lhs, rhs, comparators[cmp].cmp);  		}  		// Now, try partial matches.  		Operand *c1, *c2;  		for (int cmp = 0; comparators[cmp].op != 0; cmp++) { -			if (comparators[cmp].op == op[0]) { -				if (comparators[cmp].o1 == lhs->_type && -						(c2 = convertOperand(rhs, comparators[cmp].o2)) != NULL) { -					bool res = compare(lhs, c2, comparators[cmp].cmp); -					delete c2; - -					return res; -				} else if (comparators[cmp].o2 == rhs->_type && -						(c1 = convertOperand(lhs, comparators[cmp].o1)) != NULL) { -					bool res = compare(c1, rhs, comparators[cmp].cmp); -					delete c1; -					return res; -				} +			if (comparators[cmp].op != op[0]) +				continue; + +			if (comparators[cmp].o1 == lhs->_type && +					(c2 = convertOperand(rhs, comparators[cmp].o2)) != NULL) { +				bool res = compare(lhs, c2, comparators[cmp].cmp); +				delete c2; +				return res; +			} else if (comparators[cmp].o2 == rhs->_type && +					(c1 = convertOperand(lhs, comparators[cmp].o1)) != NULL) { +				bool res = compare(c1, rhs, comparators[cmp].cmp); +				delete c1; +				return res;  			}  		}  		// Now, try double conversion.  		for (int cmp = 0; comparators[cmp].op != 0; cmp++) { +			if (comparators[cmp].op != op[0]) +				continue; + +			if (comparators[cmp].o1 == lhs->_type || comparators[cmp].o2 == rhs->_type) +				continue; +  			if ((c1 = convertOperand(lhs, comparators[cmp].o1)) != NULL) {  				if ((c2 = convertOperand(rhs, comparators[cmp].o2)) != NULL) {  					bool res = compare(c1, c2, comparators[cmp].cmp);  					delete c1;  					delete c2; -  					return res;  				}  				delete c1; @@ -690,7 +697,7 @@ bool Script::eval(Operand *lhs, const char *op, Operand *rhs) {  Script::Operand *Script::convertOperand(Operand *operand, int type) {  	if (operand->_type == type) -		return new Operand(*operand); +		error("Incorrect conversion to type %d", type);  	if (type == SCENE) {  		if (operand->_type == STRING || operand->_type == NUMBER) { | 
