aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2015-12-23 23:40:58 +0100
committerEugene Sandulenko2015-12-27 15:41:00 +0100
commit88faad5d08bc10272f04ebc1ce122b8b446d31a8 (patch)
tree4751f8d757b7b1b5ccae92f8025f38b2aba967e1 /engines
parent870d6748fed63733a5a4f35b7e4485fb9cfcf56b (diff)
downloadscummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.tar.gz
scummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.tar.bz2
scummvm-rg350-88faad5d08bc10272f04ebc1ce122b8b446d31a8.zip
WAGE: Simplified code and avoid extra object allocations
Diffstat (limited to 'engines')
-rw-r--r--engines/wage/script.cpp43
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) {