Invalid reordering in ClassReader
Werner Dietl
wdietl at gmail.com
Thu Feb 13 08:43:41 PST 2014
Any thoughts on this?
Should I open an issue?
cu, WMD.
On Fri, Feb 7, 2014 at 7:30 PM, Werner Dietl <wdietl at gmail.com> wrote:
> This changeset:
>
> http://hg.openjdk.java.net/jdk9/dev/langtools/rev/d607ae60772d
>
> contains a re-ordering of how the bytecode is read.
>
> --- a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Sun
> Feb 02 12:12:01 2014 +0100
> +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon
> Feb 03 17:19:15 2014 -0500
>
> // local variable
> - case LOCAL_VARIABLE:
> - // resource variable
> - case RESOURCE_VARIABLE:
> - int table_length = nextChar();
> + case LOCAL_VARIABLE: {
> + final int table_length = nextChar();
> + final TypeAnnotationPosition position =
> + TypeAnnotationPosition.localVariable(readTypePath());
> +
> position.lvarOffset = new int[table_length];
> position.lvarLength = new int[table_length];
> position.lvarIndex = new int[table_length];
> @@ -1498,67 +1518,142 @@ public class ClassReader {
> position.lvarLength[i] = nextChar();
> position.lvarIndex[i] = nextChar();
> }
> - break;
> + return position;
> + }
>
> The code now reads the TypePath before the local variable information.
> This breaks the order in which the ClassWriter writes this information.
>
> This results in a ClassCastException in unrelated code, because the
> ClassReader gets confused about the class file.
>
> In type-annotations, I changed the code back:
>
> http://hg.openjdk.java.net/type-annotations/type-annotations/langtools/rev/7e9c983565ac
>
> and this resolves these exceptions.
>
> Is there a reason for this change? I think the previous implementation
> did the right ordering according to the spec.
>
> cu, WMD.
>
> --
> http://www.google.com/profiles/wdietl
--
http://www.google.com/profiles/wdietl
More information about the type-annotations-dev
mailing list