List of usage examples for org.objectweb.asm MethodVisitor visitLdcInsn
public void visitLdcInsn(final Object value)
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void makeSetMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "set", "(Ljava/lang/String;Ljava/lang/Object;)L" + owner + ";", null, null); visitor.visitCode();//from w w w . ja va2s . c o m insertPrivateElementCheck(struct, visitor); Label nextCase = new Label(); for (Member member : struct.getMembers()) { visitor.visitLdcInsn(member.getName()); visitor.visitVarInsn(ALOAD, 1); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false); visitor.visitJumpInsn(IFEQ, nextCase); visitor.visitVarInsn(ALOAD, 0); visitor.visitVarInsn(ALOAD, 2); visitor.visitMethodInsn(INVOKEVIRTUAL, owner, member.getName(), "(Ljava/lang/Object;)L" + owner + ";", false); visitor.visitInsn(ARETURN); visitor.visitLabel(nextCase); nextCase = new Label(); } insertUnknowElementCode(struct, visitor); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void makeGetMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "get", "(Ljava/lang/String;)Ljava/lang/Object;", null, null);/*from w w w.jav a 2 s . co m*/ visitor.visitCode(); insertPrivateElementCheck(struct, visitor); Label nextCase = new Label(); for (Member member : struct.getMembers()) { visitor.visitLdcInsn(member.getName()); visitor.visitVarInsn(ALOAD, 1); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false); visitor.visitJumpInsn(IFEQ, nextCase); visitor.visitVarInsn(ALOAD, 0); visitor.visitMethodInsn(INVOKEVIRTUAL, owner, member.getName(), "()Ljava/lang/Object;", false); visitor.visitInsn(ARETURN); visitor.visitLabel(nextCase); nextCase = new Label(); } insertUnknowElementCode(struct, visitor); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void throwLocalized(MethodVisitor visitor, String exceptionType, String message, String structName) { visitor.visitTypeInsn(NEW, exceptionType); visitor.visitInsn(DUP);/* w w w .j av a 2 s . c o m*/ visitor.visitLdcInsn(message); visitor.visitInsn(ICONST_1); visitor.visitTypeInsn(ANEWARRAY, "java/lang/Object"); visitor.visitInsn(DUP); visitor.visitInsn(ICONST_0); visitor.visitLdcInsn(structName); visitor.visitInsn(AASTORE); visitor.visitMethodInsn(INVOKESTATIC, "gololang/Messages", "message", "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", false); visitor.visitMethodInsn(INVOKESPECIAL, exceptionType, "<init>", "(Ljava/lang/String;)V", false); visitor.visitInsn(ATHROW); }
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void insertPrivateElementCheck(Struct struct, MethodVisitor visitor) { Label afterPrivateCheck = new Label(); visitor.visitVarInsn(ALOAD, 1);//from w w w . ja v a 2 s .com visitor.visitLdcInsn("_"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z", false); visitor.visitJumpInsn(IFEQ, afterPrivateCheck); throwLocalized(visitor, "java/lang/IllegalArgumentException", "struct_private_member", struct.getPackageAndClass().toString()); visitor.visitLabel(afterPrivateCheck); }
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void makeToString(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null); visitor.visitCode();/*w w w. ja v a 2 s . c o m*/ visitor.visitTypeInsn(NEW, "java/lang/StringBuilder"); visitor.visitInsn(DUP); visitor.visitLdcInsn("struct " + struct.getPackageAndClass().className() + "{"); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V", false); boolean first = true; for (Member member : struct.getPublicMembers()) { visitor.visitInsn(DUP); visitor.visitLdcInsn((!first ? ", " : "") + member.getName() + "="); first = false; visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(DUP); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member.getName(), "Ljava/lang/Object;"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;", false); } visitor.visitLdcInsn("}"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:org.eclipse.golo.compiler.JavaBytecodeStructGenerator.java
License:Open Source License
private void initMembersField(Struct struct, String owner, MethodVisitor visitor) { int arg;/* w w w . java2s. co m*/ visitor.visitVarInsn(ALOAD, 0); loadInteger(visitor, struct.getPublicMembers().size()); visitor.visitTypeInsn(ANEWARRAY, "java/lang/String"); arg = 0; for (Member member : struct.getPublicMembers()) { visitor.visitInsn(DUP); loadInteger(visitor, arg); visitor.visitLdcInsn(member.getName()); visitor.visitInsn(AASTORE); arg++; } visitor.visitFieldInsn(PUTFIELD, owner, "members", "[Ljava/lang/String;"); }
From source file:org.eclipse.golo.compiler.JavaBytecodeUnionGenerator.java
License:Open Source License
private void makeToString(ClassWriter classWriter, UnionValue value) { MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null); visitor.visitCode();//from w w w .ja v a2 s.com if (!value.hasMembers()) { visitor.visitLdcInsn( "union " + value.getUnion().getPackageAndClass().className() + "." + value.getName()); } else { visitor.visitTypeInsn(NEW, "java/lang/StringBuilder"); visitor.visitInsn(DUP); visitor.visitLdcInsn( "union " + value.getUnion().getPackageAndClass().className() + "." + value.getName() + "{"); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V", false); visitor.visitVarInsn(ASTORE, 1); boolean first = true; for (Member member : value.getMembers()) { visitor.visitVarInsn(ALOAD, 1); visitor.visitLdcInsn((first ? "" : ", ") + member.getName() + "="); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); visitor.visitVarInsn(ALOAD, 1); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, value.getPackageAndClass().toJVMType(), member.getName(), "Ljava/lang/Object;"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); first = false; } visitor.visitVarInsn(ALOAD, 1); visitor.visitLdcInsn("}"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); visitor.visitVarInsn(ALOAD, 1); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); } visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.java
License:Open Source License
/** * Generates bytecode for checking the VM monitor * @param mv the method visitor to generate code for * @param pc the current program counter *//*from www .j a v a2 s .co m*/ protected static void generateCheckMonitor(final MethodVisitor mv, final int pc) { // Labels final Label notTerminated = new Label(); // Generate bytecode mv.visitVarInsn(ALOAD, 3); // monitor: [..., monitor] mv.visitMethodInsn(INVOKEINTERFACE, // monitor.isTerminated(): [..., boolean] Type.getInternalName(VMMonitor.class), "isTerminated", Type.getMethodDescriptor(Type.BOOLEAN_TYPE, new Type[0])); mv.visitJumpInsn(IFEQ, notTerminated); // jump if isTerminated == false: [...] mv.visitTypeInsn(NEW, Type.getInternalName(VMException.class)); // new VMException: [..., vme] mv.visitInsn(DUP); // [..., vme, vme] mv.visitVarInsn(ALOAD, 1); // frame: [..., vme, vme, frame] mv.visitLdcInsn("Execution terminated."); // [..., vme, vme, frame, msg] mv.visitMethodInsn(INVOKESPECIAL, // vme.<init>(frame, msg): [..., vme] Type.getInternalName(VMException.class), "<init>", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { Type.getType(StackFrame.class), Type.getType(String.class) })); mv.visitInsn(ATHROW); // throw vme: [...] mv.visitLabel(notTerminated); mv.visitVarInsn(ALOAD, 1); // frame: [..., frame] generatePushInt(mv, pc); // [..., frame, pc] mv.visitMethodInsn(INVOKEVIRTUAL, // frame.setPc(pc): [...] Type.getInternalName(StackFrame.class), "setPc", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { Type.INT_TYPE })); mv.visitVarInsn(ALOAD, 3); // monitor: [..., monitor] mv.visitVarInsn(ALOAD, 1); // frame: [..., monitor, frame] mv.visitMethodInsn(INVOKEINTERFACE, // monitor.step(frame): [...] Type.getInternalName(VMMonitor.class), "step", Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { Type.getType(StackFrame.class) })); }
From source file:org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.java
License:Open Source License
/** * Generates an optimised instruction for pushing a constant integer <code>value</code> * onto the stack.//from ww w .ja va2 s. co m * @param value the constant integer value to push */ static void generatePushInt(final MethodVisitor mv, final int value) { if (value >= -1 && value <= 5) { switch (value) { case -1: mv.visitInsn(ICONST_M1); break; case 0: mv.visitInsn(ICONST_0); break; case 1: mv.visitInsn(ICONST_1); break; case 2: mv.visitInsn(ICONST_2); break; case 3: mv.visitInsn(ICONST_3); break; case 4: mv.visitInsn(ICONST_4); break; default: mv.visitInsn(ICONST_5); assert value == 5; break; } } else if (value < Byte.MAX_VALUE && value > Byte.MIN_VALUE) { mv.visitIntInsn(BIPUSH, value); } else if (value < Short.MAX_VALUE && value > Short.MIN_VALUE) { mv.visitIntInsn(SIPUSH, value); } else { mv.visitLdcInsn(value); } }
From source file:org.eclipse.objectteams.otredyn.bytecode.asm.AddAfterClassLoadingHook.java
License:Open Source License
void createHookCall(MethodVisitor clinit) { if (clazz.isTeam()) clinit.visitLdcInsn(Type.getObjectType(clazz.getName().replace('.', '/'))); else/* w w w.j ava2 s . c o m*/ clinit.visitInsn(Opcodes.ACONST_NULL); clinit.visitMethodInsn(INVOKESTATIC, TARGET_CLASS_NAME, TARGET_METHOD_NAME, TARGET_METHOD_DESC, false); }