On Wed, 20 Feb 2008, Bill Janssen wrote:

Sure enough, that's the difference.  Adding "--package java.lang" to
the "python -m jcc" line, as PyLucene does, somehow changes the gcc
command line, and things compile.

No, it just causes header files to be found that are missing otherwise or
incorrect. The bug in JCC could be that these files are required and not
optional. I wonder if the gcj ones were not present if this bug would be
replaced by a missing header error. It'd be interesting to know which header
if causing this. JCC is already generating some wrappers for essential JRE
classes like Object and Class. Maybe more are required.

I'm still not convinced it's a JCC bug, though :)

Let me try to convince you.  When I omit "--package java.lang", JCC
still generates header files for some small set of java.lang.*.  One
of these is java.lang.RuntimeException.  This file contains

 #include "java/lang/Exception.h"

The only "java/lang/Exception.h" on my whole machine is this:

% locate java/lang/Exception.h
/usr/include/c++/4.1.2/java/lang/Exception.h
/usr/local/gcc-3.4.5/include/java/lang/Exception.h
%

Now, "/usr/include/c++/4.1.2/java/lang/Exception.h" includes
"java/lang/Throwable.h", which in turn includes "gcj/array.h".

I'm not sure where JCC expects java/lang/Exception.h to come from if
you don't generate it.  It certainly isn't part of the Sun JDK.

Right. The Sun JDK doesn't include any of the Java class header files as these don't exist. It's a gcj feature to expose Java as C++. This is what made gcj-PyLucene originally possible and this is what JCC aims to replace.

JCC will generate the wrappers and header files all the superclasses of a class (recursively) that is requested. So, by requesting wrappers for java.lang.RuntimeException as is hardcoded in cpp.py, I should be getting the one for java.lang.Exception - its parent class - and for java.lang.Throwable, Exception's parent class.

If java/lang/Exception.h and java/lang/Throwable.h are not being generated, then there is a bug somewhere.

Looking at the code more, the bug became apparent :)
The code that does include-the-parent trick is called _before_ RuntimeException is added to the pile. My bad.

The untested (there is a lunar eclipse going on) patch below should solve the problem.

Andi..


Index: jcc/cpp.py
===================================================================
--- jcc/cpp.py  (revision 383)
+++ jcc/cpp.py  (working copy)
@@ -341,6 +341,8 @@
                     typeset.add(cls)
                     cls = cls.getSuperclass()
         typeset.add(env.findClass('java/lang/Class'))
+        typeset.add(env.findClass('java/lang/Throwable'))
+        typeset.add(env.findClass('java/lang/Exception'))
         typeset.add(env.findClass('java/lang/RuntimeException'))
         if moduleName:
             typeset.add(env.findClass('java/lang/Number'))
_______________________________________________
pylucene-dev mailing list
[email protected]
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev

Reply via email to