Skip to content

Instantly share code, notes, and snippets.

@peschwa
Created February 5, 2015 23:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peschwa/6daa3acf3df68f81e906 to your computer and use it in GitHub Desktop.
Save peschwa/6daa3acf3df68f81e906 to your computer and use it in GitHub Desktop.
else if (what == byte[].class) {
mv.visitVarInsn(Opcodes.ASTORE, 6);
mv.visitVarInsn(Opcodes.ALOAD, 6);
mv.visitVarInsn(Opcodes.ALOAD, c.tcLoc);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "org/perl6/nqp/runtime/Ops", "elems",
Type.getMethodDescriptor(Type.getType(long.class), TYPE_SMO, TYPE_TC));
mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_BYTE);
mv.visitVarInsn(Opcodes.ASTORE, 7);
mv.visitInsn(Opcodes.ICONST_0);
mv.visitVarInsn(Opcodes.ISTORE, 8);
Label loop = new Label();
mv.visitLabel(loop);
mv.visitVarInsn(Opcodes.ILOAD, 8);
mv.visitVarInsn(Opcodes.ALOAD, 7);
mv.visitInsn(Opcodes.ARRAYLENGTH);
Label loopend = new Label();
mv.visitJumpInsn(Opcodes.IF_ICMPGE, loopend);
mv.visitVarInsn(Opcodes.ALOAD, 7);
mv.visitVarInsn(Opcodes.ILOAD, 8);
mv.visitVarInsn(Opcodes.ALOAD, 6);
mv.visitVarInsn(Opcodes.ILOAD, 8);
mv.visitVarInsn(Opcodes.ALOAD, c.tcLoc);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "org/perl6/nqp/runtime/Ops", "atpos_i",
Type.getMethodDescriptor(Type.getType(long.class), TYPE_SMO, Type.getType(long.class), TYPE_TC));
mv.visitInsn(Opcodes.L2I);
mv.visitInsn(Opcodes.I2B);
mv.visitInsn(Opcodes.BASTORE);
mv.visitIincInsn(8, 1);
mv.visitJumpInsn(Opcodes.GOTO, loop);
mv.visitLabel(loopend);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment