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 }