001 package railo.transformer.bytecode.statement; 002 003 import org.objectweb.asm.Opcodes; 004 005 import railo.transformer.bytecode.BytecodeContext; 006 import railo.transformer.bytecode.BytecodeException; 007 import railo.transformer.bytecode.Statement; 008 import railo.transformer.bytecode.util.ASMUtil; 009 010 public final class Break extends StatementBase { 011 012 public Break(int line) { 013 super(line); 014 setHasFlowController(true); 015 } 016 017 /** 018 * 019 * @see railo.transformer.bytecode.statement.StatementBase#_writeOut(railo.transformer.bytecode.BytecodeContext) 020 */ 021 public void _writeOut(BytecodeContext bc) throws BytecodeException { 022 FlowControl fc = ASMUtil.getAncestorFlowControlStatement(this); 023 if(fc!=null) 024 bc.getAdapter().visitJumpInsn(Opcodes.GOTO, fc.getBreakLabel()); 025 else throw new BytecodeException("break must be inside a loop (for,while,do-while,<cfloop>,<cfwhile> ...)",getLine()); 026 } 027 028 /** 029 * 030 * @see railo.transformer.bytecode.statement.StatementBase#setParent(railo.transformer.bytecode.Statement) 031 */ 032 public void setParent(Statement parent) { 033 super.setParent(parent); 034 parent.setHasFlowController(true); 035 } 036 }