// call expressions are left associative
while (true) {
if (!newFlag && nextToken == Token.OPERATOR_OPENPAREN) {
Expression[] arguments = parseArgumentList();
expression = new CallExpression(expression, arguments);
} else if (nextToken == Token.OPERATOR_OPENSQUARE) {
readToken(Token.OPERATOR_OPENSQUARE);
Expression property = parseExpression(true);
readToken(Token.OPERATOR_CLOSESQUARE);
expression = new PropertyExpression(expression, property);