Poszukuję istniejących implementacji następującego pomysłu: załóżmy, że ktoś chce napisać kody bajtowe "wbudowanego zestawu" wewnątrz normalnego programu Java (większość odpowiednich aplikacji wymagałaby instrukcji invokedynamic, która nie jest inaczej dostępne w Javie). Jednym ze sposobów, aby to zrobić, będzie w następujący sposób:"Instalacja wbudowana" dla kodów bajtowych Java
void foo(boolean b) {
Label l1 = Asm.label();
Label l2 = Asm.label();
int i = Asm.no_int();
Asm._const(0);
Asm.store(i);
l1.bind();
Asm.load(i);
Asm.push(10);
Asm.if_cmpge(l2);
Asm.getstatic("java/lang/System", "out", "Ljava/io/PrintStream");
Asm.load(i);
Asm.invokevirtual("java/io/PrintStream", "println", "(I)V");
Asm.inc(i);
Asm._goto(l1);
l2.bind();
Asm._return();
}
Instrukcje są kodowane jako API, wówczas musielibyśmy prowadzić normalny kompilator Javy, a następnie do postprocesowego kod bajtowy i zastąpić wywołań API z rzeczywistymi instrukcjami.
P.S. Jestem świadomy ASMifier z ASM Framework, to nie rozwiązuje problemu określonego powyżej.
Nie mamy do tego interfejsu Native Java? – user2357112
JNI jest dla interfejsów między "natywnymi implementacjami" (wykonanymi w C, C++), on pyta o "wbudowany bajt kodowy" – morgano
... o! Wbudowany kod bajtowy. Myślałem, że to jest pytanie o umieszczenie rzeczywistego języka asemblera w programie Java. – user2357112