Я ищу существующие реализации следующей идеи: предположим, что кто-то хочет писать байтовые коды inline assembly внутри обычной Java-программы (большинство релевантных приложений будут включать в себя invokedynamic инструкцию, которая в других случаях не доступна на 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();
}
Инструкции кодируются как вызовы API, тогда нам нужно запустить обычный java-компилятор, а затем выполнить пост-обработку байтового кода и заменить вызовы API фактическими инструкциями.
P.S. Я знаю ASMifier ASM Framework, он не решает проблему, указанную выше.