List of usage examples for org.objectweb.asm Opcodes IFLT
int IFLT
To view the source code for org.objectweb.asm Opcodes IFLT.
Click Source Link
From source file:com.google.template.soy.jbcsrc.restricted.BytecodeUtils.java
License:Apache License
private static void checkIntComparisonOpcode(Type comparisonType, int opcode) { switch (opcode) { case Opcodes.IFEQ: case Opcodes.IFNE: return;// w w w .jav a 2 s. c om case Opcodes.IFGT: case Opcodes.IFGE: case Opcodes.IFLT: case Opcodes.IFLE: if (comparisonType.getSort() == Type.ARRAY || comparisonType.getSort() == Type.OBJECT) { throw new IllegalArgumentException( "Type: " + comparisonType + " cannot be compared via " + Printer.OPCODES[opcode]); } return; default: throw new IllegalArgumentException("Unsupported opcode for comparison operation: " + opcode); } }
From source file:com.google.template.soy.jbcsrc.restricted.BytecodeUtilsTest.java
License:Apache License
@Test public void testCompareLongs() { Expression one = constant(1L); Expression two = constant(2L); assertThatExpression(compare(Opcodes.IFNE, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFLT, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFLE, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFGT, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGE, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFEQ, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLE, two, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFGE, two, two)).evaluatesTo(true); }
From source file:com.google.template.soy.jbcsrc.restricted.BytecodeUtilsTest.java
License:Apache License
@Test public void testCompareDoubles() { Expression one = constant(1D); Expression two = constant(2D); Expression nan = constant(Double.NaN); assertThatExpression(compare(Opcodes.IFNE, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFLT, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFLE, one, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFGT, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGE, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFEQ, one, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLE, two, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFGE, two, two)).evaluatesTo(true); // There are special cases for NaN that we need to test, basically every expression involving // NaN should evaluate to false with the exception of NaN != * which always == true assertThatExpression(compare(Opcodes.IFNE, nan, two)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFNE, two, nan)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFNE, nan, nan)).evaluatesTo(true); assertThatExpression(compare(Opcodes.IFEQ, nan, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFEQ, two, nan)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFEQ, nan, nan)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLE, nan, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLE, two, nan)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLT, nan, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFLT, two, nan)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGE, nan, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGE, two, nan)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGT, nan, two)).evaluatesTo(false); assertThatExpression(compare(Opcodes.IFGT, two, nan)).evaluatesTo(false); }
From source file:com.google.template.soy.jbcsrc.SoyNodeCompiler.java
License:Apache License
@Override protected Statement visitForeachNode(ForeachNode node) { ForeachNonemptyNode nonEmptyNode = (ForeachNonemptyNode) node.getChild(0); SoyExpression expr = exprCompiler.compile(node.getExpr()).unboxAs(List.class); Scope scope = variables.enterScope(); final Variable listVar = scope.createSynthetic(SyntheticVarName.foreachLoopList(nonEmptyNode), expr, STORE); final Variable indexVar = scope.createSynthetic(SyntheticVarName.foreachLoopIndex(nonEmptyNode), constant(0), STORE);//from w w w . j a v a 2s .com final Variable listSizeVar = scope.createSynthetic(SyntheticVarName.foreachLoopLength(nonEmptyNode), MethodRef.LIST_SIZE.invoke(listVar.local()), DERIVED); final Variable itemVar = scope.create(nonEmptyNode.getVarName(), MethodRef.LIST_GET.invoke(listVar.local(), indexVar.local()).cast(SOY_VALUE_PROVIDER_TYPE), SaveStrategy.DERIVED); final Statement loopBody = visitChildrenInNewScope(nonEmptyNode); final Statement exitScope = scope.exitScope(); // it important for this to be generated after exitScope is called (or before enterScope) final Statement emptyBlock = node.numChildren() == 2 ? visitChildrenInNewScope((ForeachIfemptyNode) node.getChild(1)) : null; return new Statement() { @Override void doGen(CodeBuilder adapter) { listVar.initializer().gen(adapter); listSizeVar.initializer().gen(adapter); listSizeVar.local().gen(adapter); Label emptyListLabel = new Label(); adapter.ifZCmp(Opcodes.IFEQ, emptyListLabel); indexVar.initializer().gen(adapter); Label loopStart = adapter.mark(); itemVar.initializer().gen(adapter); loopBody.gen(adapter); adapter.iinc(indexVar.local().index(), 1); // index++ indexVar.local().gen(adapter); listSizeVar.local().gen(adapter); adapter.ifICmp(Opcodes.IFLT, loopStart); // if index < list.size(), goto loopstart // exit the loop exitScope.gen(adapter); if (emptyBlock != null) { Label skipIfEmptyBlock = new Label(); adapter.goTo(skipIfEmptyBlock); adapter.mark(emptyListLabel); emptyBlock.gen(adapter); adapter.mark(skipIfEmptyBlock); } else { adapter.mark(emptyListLabel); } } }; }
From source file:com.google.test.metric.asm.MethodVisitorBuilder.java
License:Apache License
public void visitJumpInsn(final int opcode, final Label label) { if (opcode == Opcodes.GOTO) { recorder.add(new Runnable() { public void run() { block.addOp(new Transform(lineNumber, "GOTO", null, null, null)); block.unconditionalGoto(label); }//from w w w .j a va2 s . co m }); } else if (opcode == Opcodes.JSR) { recorder.add(new Runnable() { public void run() { block.jumpSubroutine(label, lineNumber); } }); } else { recorder.add(new Runnable() { public void run() { cyclomaticComplexity.add(lineNumber); switch (opcode) { case Opcodes.IFEQ: if1("IFEQ"); break; case Opcodes.IFNE: if1("IFNE"); break; case Opcodes.IFLT: if1("IFLT"); break; case Opcodes.IFGE: if1("IFGE"); break; case Opcodes.IFGT: if1("IFGT"); break; case Opcodes.IFLE: if1("IFLE"); break; case Opcodes.IFNONNULL: if1("IFNONNULL"); break; case Opcodes.IFNULL: if1("IFNULL"); break; case Opcodes.IF_ACMPEQ: if2("IF_ACMPEQ"); break; case Opcodes.IF_ACMPNE: if2("IF_ACMPNE"); break; case Opcodes.IF_ICMPEQ: if2("IF_ICMPEQ"); break; case Opcodes.IF_ICMPGE: if2("IF_ICMPGE"); break; case Opcodes.IF_ICMPGT: if2("IF_ICMPGT"); break; case Opcodes.IF_ICMPLE: if2("IF_ICMPLE"); break; case Opcodes.IF_ICMPLT: if2("IF_ICMPLT"); break; case Opcodes.IF_ICMPNE: if2("IF_ICMPNE"); break; default: throw new UnsupportedOperationException("" + opcode); } block.conditionalGoto(label); } private void if1(String name) { block.addOp(new Transform(lineNumber, name, JavaType.INT, null, null)); } private void if2(String name) { block.addOp(new Transform(lineNumber, name, JavaType.INT, JavaType.INT, null)); } }); } }
From source file:com.mebigfatguy.junitflood.jvm.OperandStack.java
License:Apache License
public void performJumpInsn(int opcode, Label label) { switch (opcode) { case Opcodes.IFEQ: case Opcodes.IFNE: case Opcodes.IFLT: case Opcodes.IFGE: case Opcodes.IFGT: case Opcodes.IFLE: case Opcodes.IFNULL: case Opcodes.IFNONNULL: pop();/*w w w .jav a 2 s. com*/ break; case Opcodes.IF_ICMPEQ: case Opcodes.IF_ICMPNE: case Opcodes.IF_ICMPLT: case Opcodes.IF_ICMPGE: case Opcodes.IF_ICMPGT: case Opcodes.IF_ICMPLE: case Opcodes.IF_ACMPEQ: case Opcodes.IF_ACMPNE: pop2(); break; case Opcodes.GOTO: //nop break; case Opcodes.JSR: //nop -- a fudge break; } }
From source file:com.nginious.http.xsp.expr.LessEqualsOperator.java
License:Apache License
/** * Creates bytecode for evaluating the argument values as doubles. The bytecode * is generated using the specified method visitor. * /*from w w w .j a v a 2 s. c om*/ * @param visitor the method visitor */ private void compileDouble(MethodVisitor visitor) { Label labelFalse = new Label(); Label labelEnd = new Label(); value2.compile(visitor, Type.DOUBLE); value1.compile(visitor, Type.DOUBLE); visitor.visitInsn(Opcodes.DCMPL); visitor.visitJumpInsn(Opcodes.IFLT, labelFalse); // True visitor.visitLdcInsn(true); visitor.visitJumpInsn(Opcodes.GOTO, labelEnd); // False visitor.visitLabel(labelFalse); visitor.visitLdcInsn(false); visitor.visitLabel(labelEnd); }
From source file:com.nginious.http.xsp.expr.MoreEqualsOperator.java
License:Apache License
/** * Creates bytecode for evaluating the argument values as doubles. The bytecode * is generated using the specified method visitor. * /*from w ww . ja va 2 s . c o m*/ * @param visitor the method visitor */ private void compileDouble(MethodVisitor visitor) { Label labelFalse = new Label(); Label labelEnd = new Label(); value1.compile(visitor, Type.DOUBLE); value2.compile(visitor, Type.DOUBLE); visitor.visitInsn(Opcodes.DCMPL); visitor.visitJumpInsn(Opcodes.IFLT, labelFalse); // True visitor.visitLdcInsn(true); visitor.visitJumpInsn(Opcodes.GOTO, labelEnd); // False visitor.visitLabel(labelFalse); visitor.visitLdcInsn(false); visitor.visitLabel(labelEnd); }
From source file:com.retroduction.carma.transformer.asm.ror.IFGE_2_IFLT_Transition.java
License:Open Source License
public IFGE_2_IFLT_Transition() { super(); this.sourceInstruction = Opcodes.IFGE; this.targetInstruction = Opcodes.IFLT; }
From source file:com.retroduction.carma.transformer.asm.ror.IFLT_2_IFGE_Transition.java
License:Open Source License
public IFLT_2_IFGE_Transition() { super(); this.sourceInstruction = Opcodes.IFLT; this.targetInstruction = Opcodes.IFGE; }