001 package railo.transformer.bytecode.statement.tag; 002 003 import org.objectweb.asm.Label; 004 005 import railo.transformer.bytecode.BytecodeContext; 006 import railo.transformer.bytecode.BytecodeException; 007 import railo.transformer.bytecode.expression.Expression; 008 import railo.transformer.bytecode.statement.FlowControl; 009 import railo.transformer.bytecode.visitor.WhileVisitor; 010 011 public final class TagWhile extends TagBase implements FlowControl { 012 013 private WhileVisitor wv; 014 015 /** 016 * Constructor of the class 017 * @param tag 018 */ 019 public TagWhile(int line) { 020 super(line); 021 } 022 public TagWhile(int sl,int el) { 023 super(sl,el); 024 } 025 026 027 /** 028 * @see railo.transformer.bytecode.statement.StatementBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter) 029 */ 030 public void _writeOut(BytecodeContext bc) throws BytecodeException { 031 wv = new WhileVisitor(); 032 wv.visitBeforeExpression(bc); 033 getAttribute("condition").getValue().writeOut(bc, Expression.MODE_VALUE); 034 wv.visitAfterExpressionBeforeBody(bc); 035 getBody().writeOut(bc); 036 wv.visitAfterBody(bc,getEndLine()); 037 } 038 039 040 /** 041 * @see railo.transformer.bytecode.statement.FlowControl#getBreakLabel() 042 */ 043 public Label getBreakLabel() { 044 return wv.getBreakLabel(); 045 } 046 047 048 /** 049 * @see railo.transformer.bytecode.statement.FlowControl#getContinueLabel() 050 */ 051 public Label getContinueLabel() { 052 return wv.getContinueLabel(); 053 } 054 055 }