001    package railo.transformer.bytecode.visitor;
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.util.Types;
010    
011    public final class ParseBodyVisitor {
012    
013            // void outputStart()
014            public final static Method OUTPUT_START = new Method("outputStart",Types.VOID,new Type[]{});
015            
016            // void outputEnd()
017            public final static Method OUTPUT_END = new Method("outputEnd",Types.VOID,new Type[]{});
018            private TryFinallyVisitor tfv;
019    
020            public void visitBegin(BytecodeContext bc) {
021                    GeneratorAdapter adapter = bc.getAdapter();
022    
023                    tfv=new TryFinallyVisitor(new OnFinally() {
024                            public void writeOut(BytecodeContext bc) {
025                                    //ExpressionUtil.visitLine(bc, line);
026                                    bc.getAdapter().loadArg(0);
027                                    bc.getAdapter().invokeVirtual(Types.PAGE_CONTEXT,OUTPUT_END);
028                            }
029                    },null);
030    
031                    //ExpressionUtil.visitLine(bc, line);
032                    adapter.loadArg(0);
033                    adapter.invokeVirtual(Types.PAGE_CONTEXT,OUTPUT_START);
034                    tfv.visitTryBegin(bc);
035    
036    
037            }
038            public void visitEnd(BytecodeContext bc) throws BytecodeException {
039                    
040                    tfv.visitTryEnd(bc);
041    
042            }
043    }