MOHAWK: Fix associativity of LBCode operators.

This commit is contained in:
Alyssa Milburn 2011-07-03 14:18:17 +02:00
parent dd7b1399f3
commit d7f50b925e

View file

@ -277,8 +277,7 @@ LBValue LBCode::runCode(byte terminator) {
void LBCode::parseStatement() {
parseComparisons();
if (_currToken != kTokenAnd && _currToken != kTokenOr)
return;
while (_currToken == kTokenAnd || _currToken == kTokenOr) {
byte op = _currToken;
if (op == kTokenAnd)
debugN(" && ");
@ -298,6 +297,7 @@ void LBCode::parseStatement() {
debugN(" [--> %s]", result ? "true" : "false");
_stack.push(result);
}
}
void LBCode::parseComparisons() {
@ -365,9 +365,7 @@ void LBCode::parseComparisons() {
void LBCode::parseConcat() {
parseArithmetic1();
if (_currToken != kTokenConcat)
return;
while (_currToken == kTokenConcat) {
debugN(" & ");
nextToken();
parseArithmetic1();
@ -377,14 +375,13 @@ void LBCode::parseConcat() {
Common::String result = val1.toString() + val2.toString();
debugN(" [--> \"%s\"]", result.c_str());
_stack.push(result);
}
}
void LBCode::parseArithmetic1() {
parseArithmetic2();
if (_currToken != kTokenMinus && _currToken != kTokenPlus)
return;
while (_currToken == kTokenMinus || _currToken == kTokenPlus) {
byte op = _currToken;
if (op == kTokenMinus)
debugN(" - ");
@ -402,7 +399,9 @@ void LBCode::parseArithmetic1() {
result = val1.toInt() - val2.toInt();
else
result = val1.toInt() + val2.toInt();
debugN(" [--> %d]", result.toInt());
_stack.push(result);
}
}
void LBCode::parseArithmetic2() {