private ParseTree parseMemberExpressionNoNew ( ) { SourcePosition start = getTreeStartLocation ( ) ; ParseTree operand ; if ( peekAsyncFunctionStart ( ) ) { operand = parseAsyncFunctionExpression ( ) ; } else if ( peekFunction ( ) ) { operand = parseFunctionExpression ( ) ; } else { operand = parsePrimaryExpression ( ) ; } while ( peekMemberExpressionSuffix ( ) ) { switch ( peekType ( ) ) { case OPEN_SQUARE : eat ( TokenType . OPEN_SQUARE ) ; ParseTree member = parseExpression ( ) ; eat ( TokenType . CLOSE_SQUARE ) ; operand = new MemberLookupExpressionTree ( getTreeLocation ( start ) , operand , member ) ; break ; case PERIOD : eat ( TokenType . PERIOD ) ; IdentifierToken id = eatIdOrKeywordAsId ( ) ; operand = new MemberExpressionTree ( getTreeLocation ( start ) , operand , id ) ; break ; case NO_SUBSTITUTION_TEMPLATE : case TEMPLATE_HEAD : operand = parseTemplateLiteral ( operand ) ; break ; default : throw new RuntimeException ( "unreachable" ) ; } } return operand ; }
11 . 2 Member Expression without the new production