asm でバイトコード生成

とりあえずテスト

String className = "kuzha.code.jvm.JvmCodeBlock";
ClassWriter cv = new ClassWriter(ClassWriter.COMPUTE_MAXS);
MethodVisitor mv;
cv.visit(V1_5, ACC_PUBLIC, className.replace('.', '/'), null, "kuzha/code/CodeBlock", new String[0]);

mv = cv.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "kuzha/code/CodeBlock", "<init>", "()V");
mv.visitInsn(RETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();

mv = cv.visitMethod(ACC_PUBLIC, "exec", "(Lkuzha/KuzhaObject;Lkuzha/object/KuSlotTable;)Lkuzha/KuzhaObject;", null, null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("Hello Kuzha!");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
mv.visitInsn(ACONST_NULL);
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();

cv.visitEnd();
byte[] data = cv.toByteArray();

うむ。お手軽お手軽。