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    }