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 AndVisitor { 010 private Label end; 011 private Label l2; 012 public void visitBegin() { 013 end = new Label(); 014 l2 = new Label(); 015 } 016 public void visitMiddle(BytecodeContext bc) { 017 bc.getAdapter().ifZCmp(Opcodes.IFEQ, end); 018 019 020 021 } 022 public void visitEnd(BytecodeContext bc) { 023 GeneratorAdapter adapter = bc.getAdapter(); 024 adapter.ifZCmp(Opcodes.IFEQ, end); 025 adapter.push(true); 026 027 adapter.visitJumpInsn(Opcodes.GOTO, l2); 028 adapter.visitLabel(end); 029 030 adapter.push(false); 031 adapter.visitLabel(l2); 032 } 033 }