List of usage examples for org.objectweb.asm Opcodes GOTO
int GOTO
To view the source code for org.objectweb.asm Opcodes GOTO.
Click Source Link
From source file:com.asakusafw.dag.compiler.builtin.BranchOperatorGenerator.java
License:Apache License
static void branch(MethodVisitor method, Context context, UserOperator operator, LocalVarRef input, Map<OperatorProperty, FieldRef> dependencies) { OperatorOutput[] outputs = outputs(context, operator); Label[] caseLabels = Stream.of(outputs).map(o -> new Label()).toArray(Label[]::new); Label defaultLabel = new Label(); Label endLabel = new Label(); method.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeOf(Enum.class).getInternalName(), "ordinal", Type.getMethodDescriptor(Type.INT_TYPE), false); method.visitTableSwitchInsn(0, caseLabels.length - 1, defaultLabel, caseLabels); for (int i = 0; i < outputs.length; i++) { method.visitLabel(caseLabels[i]); FieldRef ref = Invariants.requireNonNull(dependencies.get(outputs[i])); ref.load(method);//ww w . j a v a 2 s . co m input.load(method); invokeResultAdd(method); method.visitJumpInsn(Opcodes.GOTO, endLabel); } method.visitLabel(defaultLabel); getNew(method, Descriptions.typeOf(AssertionError.class)); method.visitInsn(Opcodes.ATHROW); method.visitLabel(endLabel); }
From source file:com.asakusafw.dag.compiler.builtin.MasterCheckOperatorGenerator.java
License:Apache License
@Override protected void defineProcess(MethodVisitor method, Context context, UserOperator operator, LocalVarRef master, LocalVarRef transaction, FieldRef impl, Map<OperatorProperty, FieldRef> dependencies, ClassDescription target) {// w ww . j ava 2 s . c o m OperatorOutput found = operator.getOutputs().get(MasterCheck.ID_OUTPUT_FOUND); OperatorOutput missed = operator.getOutputs().get(MasterCheck.ID_OUTPUT_MISSED); Label onNull = new Label(); Label end = new Label(); master.load(method); getConst(method, null); method.visitJumpInsn(Opcodes.IF_ACMPEQ, onNull); dependencies.get(found).load(method); transaction.load(method); invokeResultAdd(method); method.visitJumpInsn(Opcodes.GOTO, end); method.visitLabel(onNull); dependencies.get(missed).load(method); transaction.load(method); invokeResultAdd(method); method.visitLabel(end); }
From source file:com.asakusafw.dag.compiler.builtin.MasterJoinOperatorGenerator.java
License:Apache License
@Override protected void defineProcess(MethodVisitor method, Context context, UserOperator operator, LocalVarRef master, LocalVarRef transaction, FieldRef impl, Map<OperatorProperty, FieldRef> dependencies, ClassDescription target) {//from w w w. j a v a 2 s. c om OperatorOutput joined = operator.getOutput(MasterJoin.ID_OUTPUT_JOINED); OperatorOutput missed = operator.getOutput(MasterJoin.ID_OUTPUT_MISSED); Label onNull = new Label(); Label end = new Label(); master.load(method); getConst(method, null); method.visitJumpInsn(Opcodes.IF_ACMPEQ, onNull); dependencies.get(joined).load(method); performJoin(method, context, operator, master, transaction, impl, dependencies, target); invokeResultAdd(method); method.visitJumpInsn(Opcodes.GOTO, end); method.visitLabel(onNull); dependencies.get(missed).load(method); transaction.load(method); invokeResultAdd(method); method.visitLabel(end); }
From source file:com.asakusafw.dag.compiler.builtin.MasterJoinUpdateOperatorGenerator.java
License:Apache License
@Override protected void defineProcess(MethodVisitor method, Context context, UserOperator operator, LocalVarRef master, LocalVarRef transaction, FieldRef impl, Map<OperatorProperty, FieldRef> dependencies, ClassDescription target) {//from www . ja v a2s . c om OperatorOutput found = operator.getOutputs().get(MasterCheck.ID_OUTPUT_FOUND); OperatorOutput missed = operator.getOutputs().get(MasterCheck.ID_OUTPUT_MISSED); Label onNull = new Label(); Label end = new Label(); master.load(method); getConst(method, null); method.visitJumpInsn(Opcodes.IF_ACMPEQ, onNull); List<ValueRef> arguments = new ArrayList<>(); arguments.add(impl); arguments.add(master); arguments.add(transaction); appendExtraViews(arguments::add, operator, dependencies::get); appendArguments(arguments::add, operator, dependencies::get); invoke(method, context, operator, arguments); dependencies.get(found).load(method); transaction.load(method); invokeResultAdd(method); method.visitJumpInsn(Opcodes.GOTO, end); method.visitLabel(onNull); dependencies.get(missed).load(method); transaction.load(method); invokeResultAdd(method); method.visitLabel(end); }
From source file:com.asakusafw.dag.compiler.jdbc.PreparedStatementAdapterGenerator.java
License:Apache License
private static void defineBody(ClassWriter writer, DataModelReference dataType, List<PropertyReference> properties, Optional<FieldRef> dateBuf) { MethodVisitor v = writer.visitMethod(Opcodes.ACC_PUBLIC, "drive", //$NON-NLS-1$ Type.getMethodDescriptor(typeOf(void.class), typeOf(PreparedStatement.class), typeOf(Object.class)), null, new String[] { typeOf(SQLException.class).getInternalName(), }); LocalVarRef row = new LocalVarRef(Opcodes.ALOAD, 1); LocalVarRef object = cast(v, 2, dataType.getDeclaration()); int columnIndex = 0; for (PropertyReference property : properties) { columnIndex++;//w ww . ja v a 2 s . co m object.load(v); getOption(v, property); LocalVarRef option = putLocalVar(v, Type.OBJECT, 3); Label elseIf = new Label(); Label endIf = new Label(); // if (option.isNull()) { option.load(v); v.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeOf(ValueOption.class).getInternalName(), "isNull", //$NON-NLS-1$ Type.getMethodDescriptor(typeOf(boolean.class)), false); v.visitJumpInsn(Opcodes.IFEQ, elseIf); row.load(v); getConst(v, columnIndex); doSetNull(v, property); v.visitJumpInsn(Opcodes.GOTO, endIf); // } else { @elseIf v.visitLabel(elseIf); row.load(v); getConst(v, columnIndex); option.load(v); doSetValue(v, property, dateBuf); // } @endIf v.visitLabel(endIf); } v.visitInsn(Opcodes.RETURN); v.visitMaxs(0, 0); v.visitEnd(); }
From source file:com.asakusafw.dag.compiler.jdbc.ResultSetAdapterGenerator.java
License:Apache License
private static void defineBody(ClassWriter writer, DataModelReference dataType, List<PropertyReference> properties, FieldRef valueBuffer, Optional<FieldRef> calendarBuf) { MethodVisitor v = writer.visitMethod(Opcodes.ACC_PUBLIC, "extract", Type.getMethodDescriptor(typeOf(Object.class), typeOf(ResultSet.class)), null, new String[] { typeOf(SQLException.class).getInternalName(), }); LocalVarRef rs = new LocalVarRef(Opcodes.ALOAD, 1); valueBuffer.load(v);//from www. ja va2 s . c om LocalVarRef buf = putLocalVar(v, Type.OBJECT, 2); int columnIndex = 0; Set<PropertyName> sawSet = new HashSet<>(); for (PropertyReference property : properties) { columnIndex++; Label elseIf = new Label(); Label endIf = new Label(); buf.load(v); getOption(v, property); rs.load(v); getConst(v, columnIndex); doGetValue(v, property, calendarBuf); // if (rs.wasNull()) { rs.load(v); v.visitMethodInsn(Opcodes.INVOKEINTERFACE, typeOf(ResultSet.class).getInternalName(), "wasNull", Type.getMethodDescriptor(typeOf(boolean.class)), true); v.visitJumpInsn(Opcodes.IFEQ, elseIf); if (isWideType(property)) { v.visitInsn(Opcodes.POP2); } else { v.visitInsn(Opcodes.POP); } doSetNull(v); v.visitJumpInsn(Opcodes.GOTO, endIf); // } else { @elseIf v.visitLabel(elseIf); doSetValue(v, property); // } @endIf v.visitLabel(endIf); sawSet.add(property.getName()); } // resets other properties for (PropertyReference property : dataType.getProperties()) { if (sawSet.contains(property.getName())) { continue; } buf.load(v); getOption(v, property); doSetNull(v); } buf.load(v); v.visitInsn(Opcodes.ARETURN); v.visitMaxs(0, 0); v.visitEnd(); }
From source file:com.codename1.tools.translator.bytecodes.Jump.java
License:Open Source License
@Override public void appendInstruction(StringBuilder b, List<Instruction> instructions) { b.append(" "); switch (opcode) { case Opcodes.IFEQ: b.append("if(POP_INT() == 0) /* IFEQ */ "); break;// w w w . j av a 2s .c o m case Opcodes.IFNE: b.append("if(POP_INT() != 0) /* IFNE */ "); break; case Opcodes.IFLT: b.append("if(POP_INT() < 0) /* IFLT */ "); break; case Opcodes.IFGE: b.append("if(POP_INT() >= 0) /* IFGE */ "); break; case Opcodes.IFGT: b.append("if(POP_INT() > 0) /* IFGT */ "); break; case Opcodes.IFLE: b.append("if(POP_INT() <= 0) /* IFLE */ "); break; case Opcodes.IF_ICMPEQ: b.append("SP-=2; if((*SP).data.i == SP[1].data.i) /* IF_ICMPEQ */ "); break; case Opcodes.IF_ICMPNE: b.append("SP-=2; if((*SP).data.i != SP[1].data.i) /* IF_ICMPNE */ "); break; case Opcodes.IF_ICMPLT: b.append("SP-=2; if((*SP).data.i < SP[1].data.i) /* IF_ICMPLT */ "); break; case Opcodes.IF_ICMPGE: b.append("SP-=2; if((*SP).data.i >= SP[1].data.i) /* IF_ICMPGE */ "); break; case Opcodes.IF_ICMPGT: b.append("SP-=2; if((*SP).data.i > SP[1].data.i) /* IF_ICMPGT */ "); break; case Opcodes.IF_ICMPLE: b.append("SP-=2; if((*SP).data.i <= SP[1].data.i) /* IF_ICMPLE */ "); break; case Opcodes.IF_ACMPEQ: b.append("SP-=2; if((*SP).data.o == SP[1].data.o) /* IF_ACMPEQ */ "); break; case Opcodes.IF_ACMPNE: b.append("SP-=2; if((*SP).data.o != SP[1].data.o) /* IF_ACMPNE */ "); break; case Opcodes.GOTO: // this space intentionally left blank break; case Opcodes.JSR: b.append("/* JSR TODO */"); /*b.append("PUSH_") b.append("goto label_"); b.append(label.toString()); b.append(";\n"); b.append("JSR_RETURN_LABEL_"); b.append(jsrCounter); b.append(":"); jsrCounter++;*/ return; case Opcodes.IFNULL: b.append("if(POP_OBJ() == JAVA_NULL) /* IFNULL */ "); break; case Opcodes.IFNONNULL: b.append("if(POP_OBJ() != JAVA_NULL) /* IFNONNULL */ "); break; } if (TryCatch.isTryCatchInMethod()) { b.append("JUMP_TO(label_"); b.append(label.toString()); b.append(", "); b.append(LabelInstruction.getLabelCatchDepth(label, instructions)); b.append(");\n"); } else { b.append("goto label_"); b.append(label.toString()); b.append(";\n"); } }
From source file:com.gargoylesoftware.js.nashorn.internal.ir.debug.NashornTextifier.java
License:Open Source License
private static boolean noFallThru(final int opcode) { switch (opcode) { case Opcodes.GOTO: case Opcodes.ATHROW: case Opcodes.ARETURN: case Opcodes.IRETURN: case Opcodes.LRETURN: case Opcodes.FRETURN: case Opcodes.DRETURN: return true; default:/* w w w . j a v a2s . c o m*/ return false; } }
From source file:com.github.anba.es6draft.compiler.assembler.InstructionAssembler.java
License:Open Source License
public void goTo(Jump jump) { methodVisitor.visitJumpInsn(Opcodes.GOTO, jump.target()); stack.goTo(jump); }
From source file:com.github.malamut2.low.AllocationMethodAdapter.java
License:Apache License
private void pushProductOfIntArrayOnStack() { Label beginScopeLabel = new Label(); Label endScopeLabel = new Label(); int dimsArrayIndex = newLocal("[I", beginScopeLabel, endScopeLabel); int counterIndex = newLocal("I", beginScopeLabel, endScopeLabel); int productIndex = newLocal("I", beginScopeLabel, endScopeLabel); Label loopLabel = new Label(); Label endLabel = new Label(); super.visitLabel(beginScopeLabel); // stack: ... intArray super.visitVarInsn(Opcodes.ASTORE, dimsArrayIndex); // -> stack: ... // counter = 0 super.visitInsn(Opcodes.ICONST_0); super.visitVarInsn(Opcodes.ISTORE, counterIndex); // product = 1 super.visitInsn(Opcodes.ICONST_1); super.visitVarInsn(Opcodes.ISTORE, productIndex); // loop:// w ww .java2 s . c om super.visitLabel(loopLabel); // if index >= arraylength goto end: super.visitVarInsn(Opcodes.ILOAD, counterIndex); super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex); super.visitInsn(Opcodes.ARRAYLENGTH); super.visitJumpInsn(Opcodes.IF_ICMPGE, endLabel); // product = product * max(array[counter],1) super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex); super.visitVarInsn(Opcodes.ILOAD, counterIndex); super.visitInsn(Opcodes.IALOAD); super.visitInsn(Opcodes.DUP); Label nonZeroDimension = new Label(); super.visitJumpInsn(Opcodes.IFNE, nonZeroDimension); super.visitInsn(Opcodes.POP); super.visitInsn(Opcodes.ICONST_1); super.visitLabel(nonZeroDimension); super.visitVarInsn(Opcodes.ILOAD, productIndex); super.visitInsn(Opcodes.IMUL); // if overflow happens it happens. super.visitVarInsn(Opcodes.ISTORE, productIndex); // iinc counter 1 super.visitIincInsn(counterIndex, 1); // goto loop super.visitJumpInsn(Opcodes.GOTO, loopLabel); // end: super.visitLabel(endLabel); // re-push dimensions array super.visitVarInsn(Opcodes.ALOAD, dimsArrayIndex); // push product super.visitVarInsn(Opcodes.ILOAD, productIndex); super.visitLabel(endScopeLabel); }