ICiStatement ParseVarOrExpr()
{
string name = this.CurrentString;
CiSymbol symbol = this.Symbols.TryLookup(name);
if (symbol is CiMacro) {
NextToken();
Expand((CiMacro) symbol);
return ParseStatement();
}
// try var
StringBuilder sb = new StringBuilder();
this.CopyTo = sb;
try {
return ParseVar();
}
catch (ParseException) {
}
finally {
this.CopyTo = null;
}
// try expr
this.CurrentString = name;
this.CurrentToken = CiToken.Id;
BeginExpand("ambigous code", sb.ToString(), null);
SetReader(new StringReader(sb.ToString()));
ICiStatement result = ParseExprWithSideEffect();
Expect(CiToken.Semicolon);
return result;
}