001 package railo.transformer.bytecode.visitor; 002 003 import org.objectweb.asm.Label; 004 import org.objectweb.asm.Opcodes; 005 import org.objectweb.asm.commons.GeneratorAdapter; 006 007 import railo.transformer.bytecode.BytecodeContext; 008 009 public final class DecisionDoubleVisitor { 010 /* 011 public static final int GT=Opcodes.IF_ICMPGT; 012 public static final int GTE=Opcodes.IF_ICMPGE; 013 public static final int LT=Opcodes.IF_ICMPLT; 014 public static final int LTE=Opcodes.IF_ICMPLE; 015 public static final int EQ=Opcodes.IF_ICMPEQ; 016 public static final int NEQ=Opcodes.IF_ICMPNE; 017 */ 018 public static final int GT=Opcodes.IFLE; 019 public static final int GTE=Opcodes.IFLT; 020 public static final int LT=Opcodes.IFGE; 021 public static final int LTE=Opcodes.IFGT; 022 public static final int EQ=Opcodes.IFNE; 023 public static final int NEQ=Opcodes.IFEQ; 024 025 private int operation; 026 public void visitBegin() { 027 028 } 029 public void visitMiddle(int operation) { 030 this.operation=operation; 031 } 032 public void visitGT() { 033 this.operation=GT; 034 } 035 public void visitGTE() { 036 this.operation=GTE; 037 } 038 public void visitLT() { 039 this.operation=LT; 040 } 041 public void visitLTE() { 042 this.operation=LTE; 043 } 044 public void visitEQ() { 045 this.operation=EQ; 046 } 047 public void visitNEQ() { 048 this.operation=NEQ; 049 } 050 public void visitEnd(BytecodeContext bc) { 051 GeneratorAdapter adapter = bc.getAdapter(); 052 Label l1 = new Label(); 053 Label l2 = new Label(); 054 adapter.visitInsn(Opcodes.DCMPL); 055 adapter.visitJumpInsn(operation, l1); 056 adapter.visitInsn(Opcodes.ICONST_1); 057 adapter.visitJumpInsn(Opcodes.GOTO, l2); 058 adapter.visitLabel(l1); 059 adapter.visitInsn(Opcodes.ICONST_0); 060 adapter.visitLabel(l2); 061 } 062 }