Author: kohsuke
Date: Sun Oct  2 22:26:35 2005
New Revision: 293254

URL: http://svn.apache.org/viewcvs?rev=293254&view=rev
Log:
fixed a bug where the instrumentation failed to expand the stack size to the 
necessary size.
This problem happens when instrumenting a code like:

Object foo(Object a,Object b) {
  return new Something(a,b);
}

Modified:
    
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java

Modified: 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java?rev=293254&r1=293253&r2=293254&view=diff
==============================================================================
--- 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java
 (original)
+++ 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/transformation/bcel/BcelClassTransformer.java
 Sun Oct  2 22:26:35 2005
@@ -476,6 +476,11 @@
         }
 
         method.setMaxLocals(localVarsSize[0]);
+        // make room for additional 'null' we push on the stack to clear
+        // the local variables that are used during the constructor invocation 
instrumentation.
+        // ideally we should be able to determine when we need to add +1, but 
for now just to be
+        // safe and let's always add this.
+        method.setMaxStack(method.getMaxStack() + 1);
 
         // remove LocalVariableTypeTable attribute until BCEL #33549 is fixed,
         // so that JDK 5.0 classes can be instrumented correctly.
@@ -487,6 +492,9 @@
         }
     }
 
+    /**
+     * Used to instrument the constructor invocation.
+     */
     private InstructionList duplicateStack(MethodGen method, InvokeInstruction 
invoke, ObjectType objecttype, int[] localVarsSize) {
         // reconstruction of an uninitialed object to call the constructor.
         final InstructionFactory insFactory = new 
InstructionFactory(method.getConstantPool());



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to