[Jsr308-statements] Prototype of loop annotation compiler
Trevor Harmon
trevor at vocaro.com
Fri Feb 9 03:53:24 EST 2007
Last week I started working on modifying the javac compiler to
support loop annotations. I need this for a WCET analysis tool I'm
building for my research, and also I want to help JSR-308 bring loop
annotation support to Java 7. Toward that end, I'm posting the
modifications I've made here:
http://vocaro.com/trevor/files/javac-loop-annotations.patch
The above is a patch against the current javac repo in OpenJDK. It
adds support for annotations on while loops, for loops, and for-each
loops. (I didn't bother with do/while loops for the moment.)
I should point out that I'm not a compiler expert, and I'm new to the
javac code, so the patch is simplistic. I changed just enough to get
loop annotations working. In particular, my handling of writing out
the loop annotations as attribute data is somewhat awkward. (Part of
the problem is that javac seems to have been designed without
anticipating future annotation formats. I'm guessing it will need to
be refactored a fair bit in order to support the JSR-308
annotations.) Still, the resulting compiler is entirely useable and
should be helpful to anyone who wants to play around with loop
annotations.
A few words on implementation... The annotations are written out as
method attributes called RuntimeVisibleLoopAnnotations and
RuntimeInvisibleLoopAnnotations. The format is identical to
RuntimeVisibleAnnotations/RuntimeInvisibleAnnotations except that an
additional field has been added following "u2 type_index":
u4 pc; // Code offset to the start of the loop
To verify that my patch works, I also created a utility that will
dump a class's annotations to the console:
http://vocaro.com/trevor/files/dump-annotations.tar.gz
It displays them in the same struct-like format as the VM spec,
making the data easy to read. It can be extended without much effort
to dump any annotation format, so it should be useful to other folks
working on JSR-308, too. To try it out with loop annotations, first
install javac with the above patch applied, specify the location of
this javac in the build file, then run "ant dump". This will print
the results of a simple test case.
Hopefully this effort will help move the JSR-308 project closer to
enabling loop annotations in Java.
Let me know what you think. I can talk more about the specific
changes I made if anyone has questions about that.
Trevor
More information about the Jsr308-statements
mailing list