### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java,v retrieving revision 1.13 diff -u -r1.13 StackMapFrameCodeStream.java --- compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java 23 Aug 2006 16:32:56 -0000 1.13 +++ compiler/org/eclipse/jdt/internal/compiler/codegen/StackMapFrameCodeStream.java 22 Dec 2006 16:15:49 -0000 @@ -768,7 +768,8 @@ this.currentFrame.stackItems[this.currentFrame.numberOfStackItems - 1] = new VerificationTypeInfo(fieldBinding.type); } private VerificationTypeInfo getLocal(int resolvedPosition, StackMapFrame frame) { - final VerificationTypeInfo verificationTypeInfo = frame.locals[resolvedPosition]; + VerificationTypeInfo verificationTypeInfo = frame.locals[resolvedPosition]; + if (verificationTypeInfo == null) { return null; } @@ -1041,7 +1042,7 @@ frame.putLocal(resolvedPosition, new VerificationTypeInfo(TypeBinding.INT)); resolvedPosition++; } - + // take into account the synthetic parameters if (methodBinding.declaringClass.isNestedType()) { ReferenceBinding enclosingInstanceTypes[]; @@ -1053,6 +1054,23 @@ resolvedPosition++; } } + + TypeBinding[] arguments; + if ((arguments = methodBinding.parameters) != null) { + for (int i = 0, max = arguments.length; i < max; i++) { + final TypeBinding typeBinding = arguments[i]; + frame.putLocal(resolvedPosition, new VerificationTypeInfo(typeBinding)); + switch(typeBinding.id) { + case TypeIds.T_double : + case TypeIds.T_long : + resolvedPosition += 2; + break; + default: + resolvedPosition++; + } + } + } + SyntheticArgumentBinding syntheticArguments[]; if ((syntheticArguments = methodBinding.declaringClass.syntheticOuterLocalVariables()) != null) { for (int i = 0, max = syntheticArguments.length; i < max; i++) { @@ -1068,21 +1086,37 @@ } } } + } else { + TypeBinding[] arguments; + if ((arguments = methodBinding.parameters) != null) { + for (int i = 0, max = arguments.length; i < max; i++) { + final TypeBinding typeBinding = arguments[i]; + frame.putLocal(resolvedPosition, new VerificationTypeInfo(typeBinding)); + switch(typeBinding.id) { + case TypeIds.T_double : + case TypeIds.T_long : + resolvedPosition += 2; + break; + default: + resolvedPosition++; + } + } + } } - } - - TypeBinding[] arguments; - if ((arguments = methodBinding.parameters) != null) { - for (int i = 0, max = arguments.length; i < max; i++) { - final TypeBinding typeBinding = arguments[i]; - frame.putLocal(resolvedPosition, new VerificationTypeInfo(typeBinding)); - switch(typeBinding.id) { - case TypeIds.T_double : - case TypeIds.T_long : - resolvedPosition += 2; - break; - default: - resolvedPosition++; + } else { + TypeBinding[] arguments; + if ((arguments = methodBinding.parameters) != null) { + for (int i = 0, max = arguments.length; i < max; i++) { + final TypeBinding typeBinding = arguments[i]; + frame.putLocal(resolvedPosition, new VerificationTypeInfo(typeBinding)); + switch(typeBinding.id) { + case TypeIds.T_double : + case TypeIds.T_long : + resolvedPosition += 2; + break; + default: + resolvedPosition++; + } } } }