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

Reply via email to