MOHAWK: Fix parameterless calls when parsing LB scripts.

This commit is contained in:
Alyssa Milburn 2011-12-01 23:51:52 +01:00
parent ec8d820720
commit d015a37e00

View file

@ -682,7 +682,7 @@ Common::Array<LBValue> LBCode::readParams() {
byte numParams = _data[_currOffset++]; byte numParams = _data[_currOffset++];
if (!numParams) { if (!numParams) {
debugN("()\n"); debugN("()");
nextToken(); nextToken();
return params; return params;
} }
@ -1486,6 +1486,8 @@ uint LBCode::parseCode(const Common::String &source) {
break; break;
// open bracket // open bracket
case '(': case '(':
bool parameterless;
parameterless = false;
if (wasFunction) { if (wasFunction) {
// function call parameters // function call parameters
wasFunction = false; wasFunction = false;
@ -1501,6 +1503,7 @@ uint LBCode::parseCode(const Common::String &source) {
continue; continue;
if (source[i] != ')') if (source[i] != ')')
break; break;
parameterless = true;
code[code.size() - 1] = 0; code[code.size() - 1] = 0;
break; break;
} }
@ -1508,14 +1511,20 @@ uint LBCode::parseCode(const Common::String &source) {
// brackets around expression // brackets around expression
counterPositions.push_back(0); counterPositions.push_back(0);
} }
code.push_back(kTokenOpenBracket); if (!parameterless)
code.push_back(kTokenOpenBracket);
break; break;
// close bracket // close bracket
case ')': case ')':
if (counterPositions.empty()) if (counterPositions.empty())
error("while parsing script '%s', encountered unmatched )", source.c_str()); error("while parsing script '%s', encountered unmatched )", source.c_str());
// don't push a kTokenCloseBracket for a parameterless function call
uint counterPos2;
counterPos2 = counterPositions.back();
if (!counterPos2 || code[counterPos2])
code.push_back(kTokenCloseBracket);
counterPositions.pop_back(); counterPositions.pop_back();
code.push_back(kTokenCloseBracket);
break; break;
// comma (seperating function params) // comma (seperating function params)
case ',': case ',':