关于goto _L2; else goto _L1

源码:

  Script script = m_script;
        int iLine = script.getLine();
        int ofInLine = script.getOffset();
        try
        {
            ParsePosition pos;
            String sData;
            if(script.nextChar() == '<')
            {
                switch(script.nextChar())
                {
                case 47: // '/'
                    m_nCtx = 5;
                    return new XmlToken(XmlToken.TOK_ENDTAG_START, iLine, ofInLine, script.getOffset() - ofInLine);
 
                case 63: // '?'
                    m_nCtx = 4;
                    return new XmlToken(XmlToken.TOK_PI_START, iLine, ofInLine, script.getOffset() - ofInLine);
 
                case 33: // '!'
                    switch(script.nextChar())
                    {
                    case 45: // '-'
                        match('-');
                        m_nCtx = 3;
                        return new XmlToken(XmlToken.TOK_COMMENT_START, iLine, ofInLine, script.getOffset() - ofInLine);
 
                    case 91: // '['
                        match("CDATA[");
                        pos = script.savePosition();
                        scan("]]>");
                        sData = script.subScript(pos).toString();
                        script.nextChar();
                        script.nextChar();
                        script.nextChar();
                        return new XmlToken(2, 4, 4, sData, sData, iLine, ofInLine, script.getOffset() - ofInLine);
 
                    case 68: // 'D'
                        script.putBackChar();
                        match("DOCTYPE");
                        m_nCtx = 2;
                        return new XmlToken(XmlToken.TOK_DOCTYPE_START, iLine, ofInLine, script.getOffset() - ofInLine);
                    }
                    script.putBackChar();
                    match('-');
                    throw internalError();
                }
                script.putBackChar();
                m_nCtx = 5;
                return new XmlToken(XmlToken.TOK_ELEMENT_START, iLine, ofInLine, script.getOffset() - ofInLine);
            }
            script.putBackChar();
            pos = script.savePosition();
            while(script.nextChar() != '<') ;
            script.putBackChar();
            sData = script.subScript(pos).toString();
            return new XmlToken(2, 4, 3, sData, sData, iLine, ofInLine, script.getOffset() - ofInLine);
        }
        catch(EOFException e)
        {
            logError(3, "XT-002", null, script.getLine(), script.getOffset(), 0);
            throw new CompilerException();
        }
        catch(IOException e)
        {
            logError(3, "XT-003", new String[] {
                e.toString()
            }, script.getLine(), script.getOffset(), 0);
        }
        throw new CompilerException();

反编译后:

    Script script;
        int iLine;
        int ofInLine;
        script = m_script;
        iLine = script.getLine();
        ofInLine = script.getOffset();
        if(script.nextChar() != '<') goto _L2; else goto _L1
_L1:
        script.nextChar();
        JVM INSTR lookupswitch 3: default 330
    //                   33: 124
    //                   47: 72
    //                   63: 98;
           goto _L3 _L4 _L5 _L6
_L5:
        m_nCtx = 5;
        return new XmlToken(XmlToken.TOK_ENDTAG_START, iLine, ofInLine, script.getOffset() - ofInLine);
_L6:
        m_nCtx = 4;
        return new XmlToken(XmlToken.TOK_PI_START, iLine, ofInLine, script.getOffset() - ofInLine);
_L4:
        script.nextChar();
        JVM INSTR lookupswitch 3: default 313
    //                   45: 164
    //                   68: 275
    //                   91: 196;
           goto _L7 _L8 _L9 _L10
_L8:
        match('-');
        m_nCtx = 3;
        return new XmlToken(XmlToken.TOK_COMMENT_START, iLine, ofInLine, script.getOffset() - ofInLine);
_L10:
        String sData;
        match("CDATA[");
        ParsePosition pos = script.savePosition();
        scan("]]>");
        sData = script.subScript(pos).toString();
        script.nextChar();
        script.nextChar();
        script.nextChar();
        return new XmlToken(2, 4, 4, sData, sData, iLine, ofInLine, script.getOffset() - ofInLine);
_L9:
        script.putBackChar();
        match("DOCTYPE");
        m_nCtx = 2;
        return new XmlToken(XmlToken.TOK_DOCTYPE_START, iLine, ofInLine, script.getOffset() - ofInLine);
_L7:
        script.putBackChar();
        match('-');
        throw internalError();
_L3:
        script.putBackChar();
        m_nCtx = 5;
        return new XmlToken(XmlToken.TOK_ELEMENT_START, iLine, ofInLine, script.getOffset() - ofInLine);
_L2:
        script.putBackChar();
        ParsePosition pos = script.savePosition();
        while(script.nextChar() != '<') ;
        script.putBackChar();
        sData = script.subScript(pos).toString();
        return new XmlToken(2, 4, 3, sData, sData, iLine, ofInLine, script.getOffset() - ofInLine);
        EOFException e;
        e;
        logError(3, "XT-002", null, script.getLine(), script.getOffset(), 0);
        throw new CompilerException();
        e;
        logError(3, "XT-003", new String[] {
            e.toString()
        }, script.getLine(), script.getOffset(), 0);
        throw new CompilerException();


你可能感兴趣的:(关于goto _L2; else goto _L1)