org.objectweb.fractal.julia.asm
Class TraceCodeGenerator

java.lang.Object
  extended by org.objectweb.fractal.julia.asm.AbstractCodeGenerator
      extended by org.objectweb.fractal.julia.asm.TraceCodeGenerator
All Implemented Interfaces:
Opcodes, CodeGenerator, Initializable

public class TraceCodeGenerator
extends AbstractCodeGenerator
implements Initializable

A CodeGenerator to generate pre and post code to trace method calls. More precisely the code adapters returned by the generateInterceptionCode method (see CodeGenerator) transform the original methods into methods of the following form:

 <method signature> {
   <return type> result;
   System.err.println("Entering <method signature>");
   // original method code, where returns are replaced with gotos
   System.err.println("Leaving <method signature>");
   return result;
 }
 


Field Summary
 
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, V1_1, V1_2, V1_3, V1_4, V1_5
 
Fields inherited from interface org.objectweb.fractal.julia.asm.CodeGenerator
IN, IN_OUT, OUT
 
Constructor Summary
TraceCodeGenerator()
           
 
Method Summary
protected  void generateInterceptionCodeBlock(Method m, boolean pre, MethodVisitor cv, int formals)
          Generates an interception code block for the given method.
 int init(InterceptorClassGenerator icg)
          Initializes this code generator.
 void initialize(Tree args)
          Initializes this object with the given arguments.
 
Methods inherited from class org.objectweb.fractal.julia.asm.AbstractCodeGenerator
close, generateCloneCode, generateInitCode, generateInterceptionCode, getImplementedInterfaces, getInterceptionCodeFormals, getInterceptionType, intercept
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TraceCodeGenerator

public TraceCodeGenerator()
Method Detail

initialize

public void initialize(Tree args)
Initializes this object with the given arguments.

Specified by:
initialize in interface Initializable
Parameters:
args - the type of this code generator. This tree must be of the form "(in|out|inout)".

init

public int init(InterceptorClassGenerator icg)
Description copied from interface: CodeGenerator
Initializes this code generator.

Specified by:
init in interface CodeGenerator
Overrides:
init in class AbstractCodeGenerator
Parameters:
icg - the interceptor class generator to which this code generator belongs.
Returns:
the type of this code generator, i.e., either IN, OUT or IN_OUT.

generateInterceptionCodeBlock

protected void generateInterceptionCodeBlock(Method m,
                                             boolean pre,
                                             MethodVisitor cv,
                                             int formals)
Description copied from class: AbstractCodeGenerator
Generates an interception code block for the given method.

Specified by:
generateInterceptionCodeBlock in class AbstractCodeGenerator
Parameters:
m - the method for which the interception code must be generated.
pre - true to generate a pre code block, or false to generate a post code block.
cv - the method visitor to be used to generate the interception code.
formals - the index of the first local variable reserved for the code block. The generated code can use the local variables between indexes formals, inclusive, and formals + getInterceptionCodeFormals(m), exclusive.