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