源码:
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();