private Node statement() throws IOException
    {
        try {

            Node pn = statementHelper(null);
            if (pn != null) {
                if (compilerEnv.isStrictMode() && !pn.hasSideEffects())
                    addStrictWarning("msg.no.side.effects", "");

                handlePN(pn);

                return pn;
            }
        }
        catch (ParserException e) {
        }

        // skip to end of statement
        int lineno = ts.getLineno();
        guessingStatementEnd: for (;;) {
            int tt = peekTokenOrEOL();
            consumeToken();
            switch (tt) {
            case Token.ERROR:
            case Token.EOF:
            case Token.EOL:
            case Token.SEMI:
                break guessingStatementEnd;
            }
        }
        Node n = nf.createExprStatement(nf.createName("error"), lineno);
        return n;
    }