001    package railo.transformer.bytecode.statement;
002    
003    import org.objectweb.asm.Type;
004    import org.objectweb.asm.commons.GeneratorAdapter;
005    import org.objectweb.asm.commons.Method;
006    
007    import railo.transformer.bytecode.BytecodeContext;
008    import railo.transformer.bytecode.BytecodeException;
009    import railo.transformer.bytecode.Position;
010    import railo.transformer.bytecode.util.Types;
011    
012    public final class Abort extends StatementBaseNoFinal {
013    
014            private static final Type ABORT = Type.getType(railo.runtime.exp.Abort.class);
015            
016            // ExpressionException newInstance(int)
017            private static final Method NEW_INSTANCE =  new Method(
018                            "newInstance",
019                            ABORT,
020                            new Type[]{Types.INT_VALUE});
021    
022            
023            public Abort(Position start, Position end) {
024                    super(start,end);
025            }
026    
027            /**
028             *
029             * @see railo.transformer.bytecode.statement.StatementBase#_writeOut(railo.transformer.bytecode.BytecodeContext)
030             */
031            public void _writeOut(BytecodeContext bc) throws BytecodeException {
032                    GeneratorAdapter adapter = bc.getAdapter();
033                    adapter.push(railo.runtime.exp.Abort.SCOPE_PAGE);
034                    adapter.invokeStatic(ABORT, NEW_INSTANCE);
035                    adapter.throwException();
036                    
037            }
038    }