Announcement: micro-libgcj

Per Bothner per@bothner.com
Fri Jan 6 22:39:00 GMT 2006


Andrew Haley wrote:
> That would suit me well, but there may be some quasi-religious
> objections to preprocessing. As in "How can you do this? Java
> doesn't have a preprocessor!" :-)
>> In all seriousness, we only have two routes: either preprocess or keep
> micro-libgcj on a separate branch and repeatedly merge. I don't like
> either objection, but it seems to me the second is worse.

Kawa takes an approach to pre-proprocessing that may be suitable.
Both the input and output to the pre-processor is a regular Java
file, but with differenent sections commented out.
The default CVS-checked in Java file assume JDK 1.4 functionality.
For example:
 /* #ifdef use:java.net.URI */
 static URI URLtoURI (URL url)
 throws java.net.URISyntaxException
 {
 /* #ifdef JAVA5 */
 // return url.toURI();
 /* #else */
 return new URI(url.toString());
 /* #endif */
 }
 /* #else */
 // static String URLtoURI (URL url)
 // {
 // return url.toString();
 // }
 /* #endif */
If you run gnu.kawa.util.PreProcess +JAVA5 +use:java.net.URI you get:
 /* #ifdef use:java.net.URI */
 static URI URLtoURI (URL url)
 throws java.net.URISyntaxException
 {
 /* #ifdef JAVA5 */
 return url.toURI();
 /* #else */
 // return new URI(url.toString());
 /* #endif */
 }
 /* #else */
 // static String URLtoURI (URL url)
 // {
 // return url.toString();
 // }
 /* #endif */
If you run gnu.kawa.util.PreProcess -JAVA5 -use:java.net.URI you get:
 /* #ifdef use:java.net.URI */
 // static URI URLtoURI (URL url)
 // throws java.net.URISyntaxException
 // {
 // /* #ifdef JAVA5 */
 // return url.toURI();
 // /* #else */
 // return new URI(url.toString());
 // /* #endif */
 // }
 /* #else */
 static String URLtoURI (URL url)
 {
 return url.toString();
 }
 /* #endif */
The PreProcess class modifies each source file in place, but it can
easily be modified to write the output to a new file.
So how does this solve the current problem? Basically, you can use
various directives to control which features should be skipped for
(various configurations of) micro-libgcj. The default checked-in
code has all the standard features. To generate a micro-libgcj
configuration, you preprocess the relavant files, creating a
separate tree of modified files. You can use apropriate CLASSPATH
options to make sure the modified versions are found before the
standard versions.
http://sources.redhat.com/cgi-bin/cvsweb.cgi/kawa/gnu/kawa/util/PreProcess.java?rev=1.5&content-type=text/x-cvsweb-markup&cvsroot=kawa
-- 
	--Per Bothner
per@bothner.com http://per.bothner.com/


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /