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 /engines | |
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
Diffstat (limited to 'engines')
-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) { |