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 }