protected void buildSystemHashCode(ClassWriter cw) { { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "identityHashCode", "(Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs( 0, 0 ); mv.visitEnd(); } }
private void addPrintOut(String text) { mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn(text); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); }
protected final void printStack() { mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "<init>", "()V"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/RuntimeException", "printStackTrace", "()V"); mv.visitInsn(RETURN); }
public void iconst(final int cst) { if (cst >= -1 && cst <= 5) { mv.visitInsn(Opcodes.ICONST_0 + cst); } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) { mv.visitIntInsn(Opcodes.BIPUSH, cst); } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) { mv.visitIntInsn(Opcodes.SIPUSH, cst); } else { mv.visitLdcInsn(cst); } }
protected void invokeContainsKey( MethodVisitor mv, String fieldName ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); mv.visitInsn( ICONST_1 ); mv.visitInsn( IRETURN ); mv.visitLabel( l0 ); }
protected void buildInitSoftFields( ClassWriter cw, String wrapperName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { MethodVisitor mv = cw.visitMethod(ACC_PRIVATE, "initSoftFields", "()V", null, null); mv.visitCode(); int stackSize = initSoftFields( mv, wrapperName, trait, core, mask ); mv.visitInsn(RETURN); // mv.visitMaxs(4 + stackSize, 2); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
public void produceBytecodePut(MethodVisitor mv, String propertyName, VariableResolverFactory factory) { mv.visitTypeInsn(CHECKCAST, "java/util/List"); mv.visitInsn(ICONST_0); mv.visitLdcInsn("set"); mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "set", "(ILjava/lang/Object;)Ljava/lang/Object;"); mv.visitInsn(POP); mv.visitInsn(ACONST_NULL); } }
public void aconst(final Object cst) { if (cst == null) { mv.visitInsn(Opcodes.ACONST_NULL); } else { mv.visitLdcInsn(cst); } }
protected final void invokeConstructor(Class<?> clazz, Object[] params, Class<?>... paramsType) { mv.visitTypeInsn(NEW, internalName(clazz)); mv.visitInsn(DUP); if (params != null) { for (Object param : params) mv.visitLdcInsn(param); } invokeSpecial(clazz, "<init>", null, paramsType); }
private void jitNegation() { Label trueBranch = new Label(); Label falseBranch = new Label(); mv.visitJumpInsn(IFNE, trueBranch); mv.visitInsn(ICONST_1); mv.visitJumpInsn(GOTO, falseBranch); mv.visitLabel(trueBranch); mv.visitInsn(ICONST_0); mv.visitLabel(falseBranch); }
public void produceBytecodeGet(MethodVisitor mv, String propertyName, VariableResolverFactory variableResolverFactory) { mv.visitTypeInsn(CHECKCAST, "org/mvel2/tests/core/res/SampleBean"); mv.visitLdcInsn(propertyName); mv.visitMethodInsn(INVOKEVIRTUAL, "org/mvel2/tests/core/res/SampleBean", "getProperty", "(Ljava/lang/String;)Ljava/lang/Object;"); }
protected final void createArray(Class<?> componentType, int size) { mv.visitLdcInsn(size); if (componentType.isPrimitive()) { int newPrimitiveArrayType = T_BOOLEAN; if (componentType == int.class) { newPrimitiveArrayType = T_INT; } else if (componentType == long.class) { newPrimitiveArrayType = T_LONG; } else if (componentType == double.class) { newPrimitiveArrayType = T_DOUBLE; } else if (componentType == float.class) { newPrimitiveArrayType = T_FLOAT; } else if (componentType == char.class) { newPrimitiveArrayType = T_CHAR; } else if (componentType == short.class) { newPrimitiveArrayType = T_SHORT; } else if (componentType == byte.class) { newPrimitiveArrayType = T_BYTE; } mv.visitIntInsn(NEWARRAY, newPrimitiveArrayType); } else { mv.visitTypeInsn(ANEWARRAY, internalName(componentType)); } }
protected final void push(Object obj) { if (obj instanceof Boolean) { mv.visitFieldInsn(GETSTATIC, "java/lang/Boolean", (Boolean)obj ? "TRUE" : "FALSE", "Ljava/lang/Boolean;"); } else { mv.visitLdcInsn(obj); } }
public void write(ClassGenerator cg, ClassWriter cw) { MethodVisitor mv = cw.visitMethod(access, name, desc, signature, exceptions); mv.visitCode(); try { body.writeBody(cg, mv); mv.visitMaxs(0, 0); } catch (Exception e) { throw new RuntimeException("Error writing method " + name, e); } mv.visitEnd(); } }
private void loadField(int number) { assert debug("ALOAD 0"); mv.visitVarInsn(ALOAD, 0); assert debug("GETFIELD p" + number); mv.visitFieldInsn(GETFIELD, className, "p" + number, "L" + NAMESPACE + "compiler/ExecutableStatement;"); }
public static void pushInt(MethodVisitor mv, int j) { switch ( j ) { case 0 : mv.visitInsn( Opcodes.ICONST_0 ); break; case 1 : mv.visitInsn( Opcodes.ICONST_1 ); break; case 2 : mv.visitInsn( Opcodes.ICONST_2 ); break; case 3 : mv.visitInsn( Opcodes.ICONST_3 ); break; case 4 : mv.visitInsn( Opcodes.ICONST_4 ); break; case 5 : mv.visitInsn( Opcodes.ICONST_5 ); break; default : mv.visitIntInsn( Opcodes.BIPUSH, j ); } }
@Override public void visitTypeInsn(final int opcode, final String type) { minSize += 3; maxSize += 3; if (mv != null) { mv.visitTypeInsn(opcode, type); } }
private void appendToStringBuilder(MethodVisitor mv, String s) { mv.visitLdcInsn( s ); mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL, Type.getInternalName(StringBuilder.class), "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;" ); }
@Override public void visitIntInsn(final int opcode, final int operand) { if (opcode == SIPUSH) { minSize += 3; maxSize += 3; } else { minSize += 2; maxSize += 2; } if (mv != null) { mv.visitIntInsn(opcode, operand); } }
private void jitConstructorInvocation(ConstructorInvocation invocation) { Constructor constructor = invocation.getConstructor(); Class<?> clazz = invocation.getReturnType(); mv.visitTypeInsn(NEW, internalName(clazz)); mv.visitInsn(DUP); int argumentCounter = 0; for (Expression argument : invocation.getArguments()) { cast(jitExpression(argument), constructor.getParameterTypes()[argumentCounter++]); } invokeSpecial(clazz, "<init>", null, constructor.getParameterTypes()); }