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]