// 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);
        }