List of usage examples for org.objectweb.asm Opcodes ARETURN
int ARETURN
To view the source code for org.objectweb.asm Opcodes ARETURN.
Click Source Link
From source file:org.fabric3.implementation.bytecode.reflection.BytecodeConsumerInvokerFactory.java
License:Open Source License
private void writeReturn(Class<?> returnType, MethodVisitor mv) { if (Void.TYPE.equals(returnType)) { mv.visitInsn(Opcodes.ACONST_NULL); mv.visitInsn(Opcodes.ARETURN); } else if (returnType.isPrimitive()) { if (Integer.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;"); mv.visitInsn(Opcodes.ARETURN); } else if (Boolean.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;"); mv.visitInsn(Opcodes.ARETURN); } else if (Double.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;"); mv.visitInsn(Opcodes.ARETURN); } else if (Long.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;"); mv.visitInsn(Opcodes.ARETURN); } else if (Float.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;"); mv.visitInsn(Opcodes.ARETURN); } else if (Short.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;"); mv.visitInsn(Opcodes.ARETURN); } else if (Byte.TYPE.equals(returnType)) { mv.visitMethodInsn(INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;"); mv.visitInsn(Opcodes.ARETURN); }// ww w .j av a 2 s. com } else { mv.visitInsn(Opcodes.ARETURN); } }
From source file:org.formulacompiler.compiler.internal.bytecode.ArrayAccessorForConstDataCompiler.java
License:Open Source License
@Override protected void compileBody() throws CompilerException { final GeneratorAdapter mv = mv(); final ArrayDescriptor dim = this.arrayNode.arrayDescriptor(); final int n = dim.numberOfElements(); final DataType eltDataType = this.arrayNode.getDataType(); final TypeCompiler eltCompiler = section().engineCompiler().typeCompiler(eltDataType); final Type eltType = eltCompiler.type(); // private double[] xy; final FieldVisitor fv = cw().visitField(Opcodes.ACC_PRIVATE, methodName(), arrayDescriptor(), null, null); fv.visitEnd();// ww w . ja v a2s. c o m // if (this.xy == null) { final Label skipInit = mv.newLabel(); mv.loadThis(); mv.visitFieldInsn(Opcodes.GETFIELD, section().classInternalName(), methodName(), arrayDescriptor()); mv.ifNonNull(skipInit); // ... new double[ n ] mv.loadThis(); mv.push(n); mv.newArray(eltType); // ... { c1, c2, ... } int i = 0; for (ExpressionNode elt : this.arrayNode.arguments()) { if (elt instanceof ExpressionNodeForConstantValue) { mv.visitInsn(Opcodes.DUP); mv.push(i); final ExpressionNodeForConstantValue constElt = (ExpressionNodeForConstantValue) elt; eltCompiler.compileConst(mv, constElt.value()); mv.arrayStore(eltType); } i++; } // this.xy *=* new double[] { ... } mv.visitFieldInsn(Opcodes.PUTFIELD, section().classInternalName(), methodName(), arrayDescriptor()); // } // return this.xy; mv.mark(skipInit); mv.loadThis(); mv.visitFieldInsn(Opcodes.GETFIELD, section().classInternalName(), methodName(), arrayDescriptor()); mv.visitInsn(Opcodes.ARETURN); }
From source file:org.formulacompiler.compiler.internal.bytecode.ArrayAccessorForFullDataCompiler.java
License:Open Source License
@Override protected void compileBody() throws CompilerException { final GeneratorAdapter mv = mv(); final DataType eltDataType = this.arrayNode.getDataType(); final ExpressionCompiler eltCompiler = expressionCompiler(eltDataType); final Type eltType = eltCompiler.type(); final String initName = methodName() + "$init"; final String initDesc = "Z"; // private boolean xy$init; final FieldVisitor fv = cw().visitField(Opcodes.ACC_PRIVATE, initName, initDesc, null, null); fv.visitEnd();/*from w w w .j a va 2 s . c om*/ // if (!this.xy$init) { final Label skipInit = mv.newLabel(); mv.loadThis(); mv.visitFieldInsn(Opcodes.GETFIELD, section().classInternalName(), initName, initDesc); mv.visitJumpInsn(Opcodes.IFNE, skipInit); // this.xy$init = true; mv.loadThis(); mv.push(true); mv.visitFieldInsn(Opcodes.PUTFIELD, section().classInternalName(), initName, initDesc); // this.xy = { ?, c1, c2, ... } mv.loadThis(); section().getArrayAccessorForConstDataOnly(this.arrayNode).compileCall(mv); int i = 0; for (ExpressionNode elt : this.arrayNode.arguments()) { if (!(elt instanceof ExpressionNodeForConstantValue)) { mv.visitInsn(Opcodes.DUP); mv.visitIntInsn(Opcodes.BIPUSH, i); eltCompiler.compile(elt); mv.arrayStore(eltType); } i++; } // return this.xy; mv.visitInsn(Opcodes.ARETURN); // } else // return this.xy; mv.mark(skipInit); mv.loadThis(); section().getArrayAccessorForConstDataOnly(this.arrayNode).compileCall(mv); mv.visitInsn(Opcodes.ARETURN); if (section().hasReset()) { final GeneratorAdapter reset = section().resetter(); // this.xy$init = false; reset.loadThis(); reset.push(false); reset.visitFieldInsn(Opcodes.PUTFIELD, section().classInternalName(), initName, initDesc); } }
From source file:org.formulacompiler.compiler.internal.bytecode.FactoryCompiler.java
License:Open Source License
private void buildComputationFactoryMethod() { final GeneratorAdapter mv = newMethod("newComputation", "(Ljava/lang/Object;)" + ByteCodeEngineCompiler.COMPUTATION_INTF.getDescriptor()); mv.newInstance(ByteCodeEngineCompiler.GEN_ROOT_CLASS); mv.dup();//from ww w . j a v a 2 s . c om mv.loadArg(0); compileClassRef(this.userInputClass, this.userInputType); mv.checkCast(this.userInputType); mv.loadThis(); mv.getField(classType(), ByteCodeEngineCompiler.ENV_MEMBER_NAME, ByteCodeEngineCompiler.ENV_CLASS); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ByteCodeEngineCompiler.GEN_ROOT_CLASS.getInternalName(), "<init>", "(" + this.userInputType.getDescriptor() + ByteCodeEngineCompiler.ENV_DESC + ")V"); mv.visitInsn(Opcodes.ARETURN); endMethod(mv); }
From source file:org.formulacompiler.compiler.internal.bytecode.FactoryCompiler.java
License:Open Source License
private void buildUserFactoryMethod() { final GeneratorAdapter mv = newMethod(this.userFactoryMethod.getName(), Type.getMethodDescriptor(this.userFactoryMethod)); mv.newInstance(ByteCodeEngineCompiler.GEN_ROOT_CLASS); mv.dup();/*from w w w . ja v a 2 s .c om*/ mv.loadArg(0); mv.loadThis(); mv.getField(classType(), ByteCodeEngineCompiler.ENV_MEMBER_NAME, ByteCodeEngineCompiler.ENV_CLASS); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ByteCodeEngineCompiler.GEN_ROOT_CLASS.getInternalName(), "<init>", "(" + this.userInputType.getDescriptor() + ByteCodeEngineCompiler.ENV_DESC + ")V"); mv.visitInsn(Opcodes.ARETURN); endMethod(mv); }
From source file:org.formulacompiler.compiler.internal.bytecode.SubSectionLazyGetterCompiler.java
License:Open Source License
@Override protected void compileBody() throws CompilerException { final SubSectionCompiler sub = this.sub; final GeneratorAdapter mv = mv(); // if (this.field == null) { final Label alreadySet = mv.newLabel(); mv.loadThis();/*from www . j a v a 2 s. c o m*/ mv.getField(section().classType(), sub.getterName(), sub.arrayType()); mv.ifNonNull(alreadySet); // ~ final DetailInput[] ds = this.inputs.getarray(); final CallFrame inputCall = sub.model().getCallChainToCall(); final Class inputContainerClass = inputCall.getMethod().getReturnType(); final Type inputContainerType = Type.getType(inputContainerClass); final int l_ds = mv.newLocal(inputContainerType); compileInputGetterCall(inputCall); mv.storeLocal(l_ds); // ~ if (ds != null) { final Label isNull = mv.newLabel(); mv.loadLocal(l_ds); mv.ifNull(isNull); final int l_di; if (inputContainerClass.isArray()) { l_di = compileInitFromArray(sub, mv, l_ds); } else if (Collection.class.isAssignableFrom(inputContainerClass)) { l_di = compileInitFromCollection(sub, mv, l_ds); } else if (Iterable.class.isAssignableFrom(inputContainerClass)) { final int l_it = mv.newLocal(ITERATOR_INTF); mv.loadLocal(l_ds); mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, ITERABLE_INTF.getInternalName(), "iterator", "()" + ITERATOR_INTF.getDescriptor()); mv.storeLocal(l_it); l_di = compileInitFromIterator(sub, mv, l_it); } else if (Iterator.class.isAssignableFrom(inputContainerClass)) { l_di = compileInitFromIterator(sub, mv, l_ds); } else { throw new CompilerException.UnsupportedDataType("The return type of '" + inputCall.getMethod() + "' is not supported as input to a repeating section."); } // ~ ~ this.field = di; mv.loadThis(); mv.loadLocal(l_di); mv.putField(section().classType(), sub.getterName(), sub.arrayType()); // ~ } else { mv.goTo(alreadySet); mv.mark(isNull); // ~ ~ this.field = new DetailPrototype[ 0 ]; mv.loadThis(); mv.push(0); mv.newArray(sub.classType()); mv.putField(section().classType(), sub.getterName(), sub.arrayType()); // ~ } // } mv.mark(alreadySet); // return this.field; mv.loadThis(); mv.getField(section().classType(), sub.getterName(), sub.arrayType()); mv.visitInsn(Opcodes.ARETURN); }
From source file:org.formulacompiler.compiler.internal.bytecode.SubSectionOutputAccessorCompiler.java
License:Open Source License
@SuppressWarnings("unchecked") @Override/*from www. j ava 2 s.co m*/ protected void compileBody() throws CompilerException { final SubSectionCompiler sub = this.sub; final GeneratorAdapter mv = mv(); final CallFrame outputCall = this.callToImplement; final Class outputContainerClass = outputCall.getMethod().getReturnType(); // get$Sect0() mv.loadThis(); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, section().classInternalName(), sub.getterName(), sub.getterDescriptor()); if (outputContainerClass.isArray()) { mv.visitInsn(Opcodes.ARETURN); } else { // Detail[] arr = get$Sect0(); final int l_arr = mv.newLocal(sub.arrayType()); mv.storeLocal(l_arr); final int l_len = mv.newLocal(Type.INT_TYPE); mv.loadLocal(l_arr); mv.arrayLength(); mv.storeLocal(l_len); // List lst = new ArrayList( arr.length ); final int l_lst = mv.newLocal(ARRAYLIST_CLASS); mv.newInstance(ARRAYLIST_CLASS); mv.dup(); mv.loadLocal(l_len); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ARRAYLIST_CLASS.getInternalName(), "<init>", "(I)V"); mv.storeLocal(l_lst); // for (int i = 0; i < len; i++) { final int l_i = mv.newLocal(Type.INT_TYPE); mv.push(0); mv.storeLocal(l_i); final Label test = mv.newLabel(); mv.goTo(test); final Label again = mv.mark(); // lst.add( arr[ i ] ); mv.loadLocal(l_lst); mv.loadLocal(l_arr); mv.loadLocal(l_i); mv.arrayLoad(sub.classType()); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ARRAYLIST_CLASS.getInternalName(), "add", "(Ljava/lang/Object;)Z"); mv.pop(); // } // for mv.iinc(l_i, 1); mv.mark(test); mv.loadLocal(l_i); mv.loadLocal(l_len); mv.ifCmp(Type.INT_TYPE, mv.LT, again); mv.loadLocal(l_lst); if (outputContainerClass.isAssignableFrom(List.class)) { // return lst; mv.visitInsn(Opcodes.ARETURN); } else if (outputContainerClass.isAssignableFrom(Iterator.class)) { // return lst.iterator(); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, ARRAYLIST_CLASS.getInternalName(), "iterator", "()" + ITERATOR_INTF.getDescriptor()); mv.visitInsn(Opcodes.ARETURN); } else { throw new CompilerException.UnsupportedDataType("The return type of '" + outputCall.getMethod() + "' is not supported as input to a repeating section."); } } }
From source file:org.glassfish.pfl.tf.spi.Util.java
License:Open Source License
public void storeFromXReturn(MethodVisitor mv, int returnOpcode, LocalVariableNode holder) { switch (returnOpcode) { case Opcodes.RETURN: // NOP/*w ww.jav a 2 s. co m*/ break; case Opcodes.ARETURN: mv.visitVarInsn(Opcodes.ASTORE, holder.index); break; case Opcodes.IRETURN: mv.visitVarInsn(Opcodes.ISTORE, holder.index); break; case Opcodes.LRETURN: mv.visitVarInsn(Opcodes.LSTORE, holder.index); break; case Opcodes.FRETURN: mv.visitVarInsn(Opcodes.FSTORE, holder.index); break; case Opcodes.DRETURN: mv.visitVarInsn(Opcodes.DSTORE, holder.index); break; } }
From source file:org.glassfish.pfl.tf.spi.Util.java
License:Open Source License
public void loadFromXReturn(MethodVisitor mv, int returnOpcode, LocalVariableNode holder) { switch (returnOpcode) { case Opcodes.RETURN: // NOP//from w w w .ja va 2 s .c om break; case Opcodes.ARETURN: mv.visitVarInsn(Opcodes.ALOAD, holder.index); break; case Opcodes.IRETURN: mv.visitVarInsn(Opcodes.ILOAD, holder.index); break; case Opcodes.LRETURN: mv.visitVarInsn(Opcodes.LLOAD, holder.index); break; case Opcodes.FRETURN: mv.visitVarInsn(Opcodes.FLOAD, holder.index); break; case Opcodes.DRETURN: mv.visitVarInsn(Opcodes.DLOAD, holder.index); break; } }
From source file:org.gradle.api.internal.model.DefaultObjectFactory.java
License:Apache License
private ClassGeneratingLoader loaderFor(Class<?> publicClass) { ///*from w ww .j a va 2s . c o m*/ // Generate implementation class // FormattingValidationProblemCollector problemCollector = new FormattingValidationProblemCollector( "Named implementation class", ModelType.of(publicClass)); visitFields(publicClass, problemCollector); if (problemCollector.hasProblems()) { throw new GradleException(problemCollector.format()); } AsmClassGenerator generator = new AsmClassGenerator(publicClass, "$Impl"); Type implementationType = generator.getGeneratedType(); ClassWriter visitor = generator.getVisitor(); Type publicType = Type.getType(publicClass); Type superClass; String[] interfaces; if (publicClass.isInterface()) { superClass = OBJECT; interfaces = new String[] { publicType.getInternalName() }; } else { superClass = publicType; interfaces = EMPTY_STRINGS; } visitor.visit(V1_5, ACC_PUBLIC | ACC_SYNTHETIC, implementationType.getInternalName(), null, superClass.getInternalName(), interfaces); // // Add name field // visitor.visitField(ACC_PRIVATE, NAME_FIELD, STRING.getDescriptor(), null, null); // // Add constructor // MethodVisitor methodVisitor = visitor.visitMethod(ACC_PUBLIC, CONSTRUCTOR_NAME, RETURN_VOID_FROM_STRING, null, EMPTY_STRINGS); methodVisitor.visitCode(); // Call this.super() methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, superClass.getInternalName(), CONSTRUCTOR_NAME, RETURN_VOID, false); // Set this.name = param1 methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitVarInsn(Opcodes.ALOAD, 1); methodVisitor.visitFieldInsn(Opcodes.PUTFIELD, implementationType.getInternalName(), NAME_FIELD, STRING.getDescriptor()); // Done methodVisitor.visitInsn(Opcodes.RETURN); methodVisitor.visitMaxs(0, 0); methodVisitor.visitEnd(); // // Add `getName()` // methodVisitor = visitor.visitMethod(ACC_PUBLIC, "getName", RETURN_STRING, null, EMPTY_STRINGS); methodVisitor.visitCode(); // return this.name methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitFieldInsn(Opcodes.GETFIELD, implementationType.getInternalName(), NAME_FIELD, STRING.getDescriptor()); methodVisitor.visitInsn(Opcodes.ARETURN); methodVisitor.visitMaxs(0, 0); methodVisitor.visitEnd(); // // Add `toString()` // methodVisitor = visitor.visitMethod(ACC_PUBLIC, "toString", RETURN_STRING, null, EMPTY_STRINGS); methodVisitor.visitCode(); // return this.name methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitFieldInsn(Opcodes.GETFIELD, implementationType.getInternalName(), NAME_FIELD, STRING.getDescriptor()); methodVisitor.visitInsn(Opcodes.ARETURN); methodVisitor.visitMaxs(0, 0); methodVisitor.visitEnd(); visitor.visitEnd(); generator.define(); // // Generate factory class // generator = new AsmClassGenerator(publicClass, "$Factory"); visitor = generator.getVisitor(); visitor.visit(V1_5, ACC_PUBLIC | ACC_SYNTHETIC, generator.getGeneratedType().getInternalName(), null, Type.getType(ClassGeneratingLoader.class).getInternalName(), EMPTY_STRINGS); // // Add constructor // methodVisitor = visitor.visitMethod(ACC_PUBLIC, CONSTRUCTOR_NAME, RETURN_VOID, null, EMPTY_STRINGS); methodVisitor.visitCode(); // Call this.super() methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getType(ClassGeneratingLoader.class).getInternalName(), CONSTRUCTOR_NAME, RETURN_VOID, false); // Done methodVisitor.visitInsn(Opcodes.RETURN); methodVisitor.visitMaxs(0, 0); methodVisitor.visitEnd(); // // Add factory method // methodVisitor = visitor.visitMethod(ACC_PUBLIC, "load", Type.getMethodDescriptor(OBJECT, STRING), null, EMPTY_STRINGS); methodVisitor.visitCode(); // Call return new <implClass>(param1) methodVisitor.visitTypeInsn(Opcodes.NEW, implementationType.getInternalName()); methodVisitor.visitInsn(Opcodes.DUP); methodVisitor.visitVarInsn(Opcodes.ALOAD, 1); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, implementationType.getInternalName(), CONSTRUCTOR_NAME, RETURN_VOID_FROM_STRING, false); methodVisitor.visitInsn(Opcodes.ARETURN); methodVisitor.visitMaxs(0, 0); methodVisitor.visitEnd(); visitor.visitEnd(); Class<Object> factoryClass = generator.define(); try { return (ClassGeneratingLoader) (factoryClass.newInstance()); } catch (Exception e) { throw UncheckedException.throwAsUncheckedException(e); } }