MOHAWK: Fix parameterless calls when parsing LB scripts.
This commit is contained in:
parent
ec8d820720
commit
d015a37e00
1 changed files with 12 additions and 3 deletions
|
@ -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 ',':
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue