re PR java/15133 (gcjh generates wrong method signatures)
authorRanjit Mathew <rmathew@hotmail.com>
Fri, 30 Apr 2004 18:14:07 +0000 (18:14 +0000)
committerRanjit Mathew <rmathew@gcc.gnu.org>
Fri, 30 Apr 2004 18:14:07 +0000 (18:14 +0000)
Fixes PR java/15133
* gjavah.c (struct method_name): Add member is_native.
(overloaded_jni_method_exists_p): Match candidate method only if
it is native.
(print_method_info): Initialise is_native flag from the method's
access flags.

From-SVN: r81357

gcc/java/ChangeLog
gcc/java/gjavah.c

index 4a4017eb0589127a4025e32c88aabe038f2b8a28..b566ffff82c8b9d5ad75501b2c2c7c2c18e37102 100644 (file)
@@ -1,3 +1,12 @@
+2004-04-30  Ranjit Mathew  <rmathew@hotmail.com>
+
+       Fixes PR java/15133
+       * gjavah.c (struct method_name): Add member is_native.
+       (overloaded_jni_method_exists_p): Match candidate method only if
+       it is native.
+       (print_method_info): Initialise is_native flag from the method's
+       access flags.
+
 2004-04-30  Roger Sayle  <roger@eyesopen.com>
 
        * builtins.c (java_builtins): Add acos, asin, ceil and floor.
index 0a09ab6c1378cc9b3bfba7de7bfd233e09c64955..45e5f251b9f0efe3c5ea572c9e3efd73d081a55f 100644 (file)
@@ -119,6 +119,7 @@ struct method_name
   int length;
   unsigned char *signature;
   int sig_length;
+  int is_native;
   struct method_name *next;
 };
 
@@ -634,7 +635,7 @@ name_is_method_p (const unsigned char *name, int length)
   return 0;
 }
 
-/* If there is already a method named NAME, whose signature is not
+/* If there is already a native method named NAME, whose signature is not
    SIGNATURE, then return true.  Otherwise return false.  */
 static int
 overloaded_jni_method_exists_p (const unsigned char *name, int length,
@@ -644,7 +645,8 @@ overloaded_jni_method_exists_p (const unsigned char *name, int length,
 
   for (p = method_name_list; p != NULL; p = p->next)
     {
-      if (p->length == length
+      if (p->is_native
+          && p->length == length
          && ! memcmp (p->name, name, length)
          && (p->sig_length != sig_length
              || memcmp (p->signature, signature, sig_length)))
@@ -851,6 +853,7 @@ print_method_info (FILE *stream, JCF* jcf, int name_index, int sig_index,
       nn->next = method_name_list;
       nn->sig_length = JPOOL_UTF_LENGTH (jcf, sig_index);
       nn->signature = xmalloc (nn->sig_length);
+      nn->is_native = METHOD_IS_NATIVE (flags);
       memcpy (nn->signature, JPOOL_UTF_DATA (jcf, sig_index),
              nn->sig_length);
       method_name_list = nn;