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 import railo.transformer.bytecode.Position; 009 import railo.transformer.bytecode.util.ExpressionUtil; 010 import railo.transformer.bytecode.util.Types; 011 012 /** 013 * @deprecated replaced with ForIntVisitor 014 */ 015 public final class ForConditionIntVisitor implements Opcodes, LoopVisitor { 016 017 private Label l0; 018 private Label l1; 019 private Label l2; 020 private Label l3; 021 private int i; 022 private Label lend; 023 private Label lbegin; 024 public int visitBegin(GeneratorAdapter adapter, int start, boolean isLocal) { 025 026 lend = new Label(); 027 lbegin = new Label(); 028 029 i=adapter.newLocal(Types.INT_VALUE); 030 031 l0 = new Label(); 032 adapter.visitLabel(l0); 033 if(isLocal)adapter.loadLocal(start,Types.INT_VALUE); 034 else adapter.push(start); 035 //mv.visitInsn(ICONST_1); 036 adapter.visitVarInsn(ISTORE, i); 037 l1 = new Label(); 038 adapter.visitLabel(l1); 039 l2 = new Label(); 040 adapter.visitJumpInsn(GOTO, l2); 041 l3 = new Label(); 042 adapter.visitLabel(l3); 043 044 return i; 045 } 046 public void visitEndBeforeCondition(BytecodeContext bc, int step, boolean isLocal,Position startline) { 047 GeneratorAdapter adapter = bc.getAdapter(); 048 049 050 adapter.visitLabel(lbegin); 051 if(isLocal) { 052 adapter.visitVarInsn(ILOAD, i); 053 //adapter.loadLocal(i); 054 adapter.loadLocal(step); 055 adapter.visitInsn(IADD); 056 //adapter.dup(); 057 adapter.visitVarInsn(ISTORE, i); 058 059 } 060 else adapter.visitIincInsn(i, step); 061 ExpressionUtil.visitLine(bc, startline); 062 adapter.visitLabel(l2); 063 } 064 065 public void visitEndAfterCondition(BytecodeContext bc) { 066 GeneratorAdapter adapter = bc.getAdapter(); 067 068 adapter.ifZCmp(Opcodes.IFNE, l3); 069 070 adapter.visitLabel(lend); 071 072 adapter.visitLocalVariable("i", "I", null, l1, lend, i); 073 074 } 075 076 077 /** 078 * 079 * @see railo.transformer.bytecode.visitor.LoopVisitor#visitContinue(org.objectweb.asm.commons.GeneratorAdapter) 080 */ 081 public void visitContinue(BytecodeContext bc) { 082 bc.getAdapter().visitJumpInsn(Opcodes.GOTO, lbegin); 083 } 084 085 /** 086 * 087 * @see railo.transformer.bytecode.visitor.LoopVisitor#visitBreak(org.objectweb.asm.commons.GeneratorAdapter) 088 */ 089 public void visitBreak(BytecodeContext bc) { 090 bc.getAdapter().visitJumpInsn(Opcodes.GOTO, lend); 091 } 092 093 /** 094 * 095 * @see railo.transformer.bytecode.visitor.LoopVisitor#getContinueLabel() 096 */ 097 public Label getContinueLabel() { 098 return lbegin; 099 } 100 101 /** 102 * 103 * @see railo.transformer.bytecode.visitor.LoopVisitor#getBreakLabel() 104 */ 105 public Label getBreakLabel() { 106 return lend; 107 } 108 }