// ECMA-262 13.10 The return statement public Node parseReturnStatement(Node node) { Node argument = null; expectKeyword("return"); if (!state.inFunctionBody) { tolerateError(Messages.IllegalReturn); } // "return" followed by a space and an identifier is very common. if (source.ToCharArray()[lastIndex] == 0x20) { if (isIdentifierStart(source.ToCharArray()[lastIndex + 1])) { argument = parseExpression(); consumeSemicolon(); return node.finishReturnStatement(argument); } } if (hasLineTerminator) { // HACK return node.finishReturnStatement(null); } if (!match(";")) { if (!match("}") && lookahead.type != TokenType.EOF) { argument = parseExpression(); } } consumeSemicolon(); return node.finishReturnStatement(argument); }