Hi Ito, Could you add (*env)->ExceptionDescribe(env) at the point where there is a failed assertion. It should work now in any case. I guess that FindClass returns NULL because it cannot find RawData* but we must check.
Regards, Guilhem. On Sat, 2005-06-04 at 08:33 +0900, Ito Kazumitsu wrote: > Hi, > > ChangeLog says: > > 2005-05-30 Helmer Kraemer <[EMAIL PROTECTED]> > > * libraries/javalib/kaffe/lang/AppClassLoader.java, > libraries/javalib/kaffe/lang/PrimordialClassLoader.java, > libraries/clib/native/PrimordialClassLoader.c: removed. Loading > classes is > now handled completely by ClassLoader / VMClassLoader. > ... > * > libraries/javalib/META-INF/services/java.nio.charset.spi.CharsetProvider: > removed, as iconv is treated specially by java.nio.charset.Charset > > The removal of META-INF/... is OK for me because I prefer using my own > CharsetProvider wrapping gnu.java.nio.charset.iconv.IconvProvider. > > But the following simple program dumps core. This problem did not occur > when kaffe.lang.*ClassLoader was used. > > bash-2.05b$ cat TestCharsetProviderMain.java > import java.nio.charset.*; > import java.nio.charset.spi.*; > public final class TestCharsetProviderMain > { > public static void main(String[] args) throws Exception > { > Class c = Class.forName("gnu.java.nio.charset.iconv.IconvProvider", > true, > Thread.currentThread().getContextClassLoader()); > System.out.println(c); > System.out.flush(); > CharsetProvider p = (CharsetProvider)(c.newInstance()); > System.out.println(p); > System.out.flush(); > System.out.println(p.charsetForName(args[0])); > } > } > bash-2.05b$ kaffe TestCharsetProviderMain EUC-JP > class gnu.java.nio.charset.iconv.IconvProvider > [EMAIL PROTECTED] > charsetForName EUC-JP > IconvMetaData [EMAIL PROTECTED] > trying new IconvCharset(info) > Assertion failed: (cls != NULL), function createRawData, file > gnu_java_nio_charset_iconv_IconvEncoder.c, line 192. > Abort trap (core dumped) > > Please note that some files are modified for debugging purpose: > > --- gnu/java/nio/charset/iconv/IconvProvider.java.orig Sat Apr 23 > 18:54:27 2005 > +++ gnu/java/nio/charset/iconv/IconvProvider.java Fri Jun 3 07:34:02 2005 > @@ -62,7 +62,7 @@ > } > } > > - private IconvProvider() > + public IconvProvider() > { > IconvMetaData.setup(); > } > @@ -88,13 +88,23 @@ > { > try > { > + System.out.println("charsetForName " + charsetName); > + System.out.flush(); > IconvMetaData info = IconvMetaData.get(charsetName); > + System.out.println("IconvMetaData " + info); > + System.out.flush(); > > // Try anyway if the set isn't found. > if (info == null) > info = new IconvMetaData(charsetName, 2.0f, 2.0f, 2.0f, 2.0f, > new String[] { }, charsetName); > - return new IconvCharset(info); > + System.out.println("trying new IconvCharset(info)"); > + System.out.flush(); > + Charset cs = new IconvCharset(info); > + System.out.println("new IconvCharset(info) " + cs); > + System.out.flush(); > + return cs; > + // return new IconvCharset(info); > } > catch (IllegalArgumentException e) > { > > > Note: Without changing private IconvProvider() to public IconvProvider(), > an instance of this class cannot be created newInstance(). > > --- libraries/clib/nio/gnu_java_nio_charset_iconv_IconvEncoder.c.~1.3.~ > Fri May 20 23:46:49 2005 > +++ libraries/clib/nio/gnu_java_nio_charset_iconv_IconvEncoder.c Sat Jun > 4 07:04:23 2005 > @@ -79,6 +79,7 @@ > if (infid == NULL || outfid == NULL) > { > cls = (*env)->GetObjectClass (env, obj); > + assert (cls != NULL); > infid = (*env)->GetFieldID (env, cls, "inremaining", "I"); > assert (infid != 0); > outfid = (*env)->GetFieldID (env, cls, "outremaining", "I"); > @@ -183,10 +184,12 @@ > > #ifdef POINTERS_ARE_64BIT > cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); > + assert (cls != NULL); > method = (*env)->GetMethodID (env, cls, "<init>", "(J)V"); > data = (*env)->NewObject (env, cls, method, (jlong) ptr); > #else > cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); > + assert (cls != NULL); > method = (*env)->GetMethodID (env, cls, "<init>", "(I)V"); > data = (*env)->NewObject (env, cls, method, (jint) ptr); > #endif > > > Note: "assert (cls != NULL)" is also written in lookupClassMethod > in kaffe/kaffevm/support.c. Without inserting "assert (cls != NULL)" > here, the failure will be checked there. > > > _______________________________________________ > kaffe mailing list > kaffe@kaffe.org > http://kaffe.org/cgi-bin/mailman/listinfo/kaffe _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe