Ein Stapelrahmen besteht aus einer Anzahl von lokalen Variablen und einer Anzahl von Werten auf dem Operandenstapel. Was Sie versuchen, zu reproduzieren offenbar das Ergebnis der Umwandlung dieses Zustandes in einem für Menschen lesbaren String der Form
FRAME FULL [list of local variables types] [list of operand stack time types]
Das erste, was Sie tun müssen,
ist die Klammern von dem Ausgang zu identifizieren Format, das ein Verständnis der enthaltenen Typ-Signaturen erfordert, da eine Signatur beginnend mit einer öffnenden Klammer wie
[C
einen Array-Typ bezeichnet, dh ein Zeichen-Array. Mit anderen Worten, einige öffnende Klammern sind Teil der Typ-Signaturen, andere sind Teil des Ausgabeformats, während schließende Klammern immer Teil des Ausgabeformats sind und nie in Typ-Signaturen erscheinen.
Wenn Sie die Typsignaturen innerhalb der beiden Gruppen identifiziert haben, geben Sie die entsprechende Anzahl an lokalen Variablen und Operandenstapeln an. In Ihrem Fall haben Sie:
FRAME FULL // frame type
[ // start local variables
java/lang/String
[C
java/lang/String
T
I
I
[C
] // seven local variables specified
[ // start of operand stack
] // empty operand stack
Aber dann müssen Sie der Art Artikels Gedanken über die Bedeutung beginnen, die von einer Druckausgabe leider nicht ableitbar ist und nur den gleichen Ausdruck Reproduktion nicht unbedingt richtig impliziert Code.
nämlich die Elemente T
und I
könnten Klassen verweisen die vollen qualifizierten Namen T
und I
mit jeweils, in welchem Fall "T"
und "I"
-FrameNode
vorbei wäre richtig. Es ist jedoch wahrscheinlicher, dass sie zu dem nicht-Klasse Stack-Frame-Typ
und int
beziehen, die unter Verwendung von vordefinierten Integer
Konstanten in ASM bezeichnet werden muss:
new FrameNode(Opcodes.F_FULL, 7, new Object[] {
"java/lang/String", "[C", "java/lang/String",
Opcodes.TOP, Opcodes.INTEGER, Opcodes.INTEGER, "[C" }, 0, new Object[0]);