[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