From c45c5e092dd08db116ed749332f3b19e96830d22 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 23 Feb 2000 20:46:18 +0000 Subject: [PATCH] gjavah.c (print_name): In JNI case, correctly quote string. * gjavah.c (print_name): In JNI case, correctly quote string. (print_method_info): Don't handle overrides in JNI mode. From-SVN: r32124 --- gcc/java/ChangeLog | 5 ++++ gcc/java/gjavah.c | 75 +++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index e682cedd008..592594e9637 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2000-02-23 Tom Tromey + + * gjavah.c (print_name): In JNI case, correctly quote string. + (print_method_info): Don't handle overrides in JNI mode. + 2000-02-22 Alexandre Petit-Bianco * parse.y (init_decl_processing): `_Jv_IsInstanceOf' returned diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c index 10240f04b5a..086ee5af044 100644 --- a/gcc/java/gjavah.c +++ b/gcc/java/gjavah.c @@ -235,17 +235,6 @@ java_double_finite (d) return (u.l & D_NAN_MASK) != D_NAN_MASK; } -static void -DEFUN(print_name, (stream, jcf, name_index), - FILE* stream AND JCF* jcf AND int name_index) -{ - if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8) - fprintf (stream, ""); - else - jcf_print_utf8 (stream, JPOOL_UTF_DATA (jcf, name_index), - JPOOL_UTF_LENGTH (jcf, name_index)); -} - /* Print a character, appropriately mangled for JNI. */ static void @@ -278,6 +267,40 @@ jni_print_char (stream, ch) } } +/* Print a name from the class data. If the index does not point to a + string, an error results. */ + +static void +DEFUN(print_name, (stream, jcf, name_index), + FILE* stream AND JCF* jcf AND int name_index) +{ + if (JPOOL_TAG (jcf, name_index) != CONSTANT_Utf8) + { + fprintf (stream, ""); + found_error = 1; + } + else if (! flag_jni) + jcf_print_utf8 (stream, JPOOL_UTF_DATA (jcf, name_index), + JPOOL_UTF_LENGTH (jcf, name_index)); + else + { + /* For JNI we must correctly quote each character. */ + const unsigned char *str = JPOOL_UTF_DATA (jcf, name_index); + int length = JPOOL_UTF_LENGTH (jcf, name_index); + const unsigned char *limit = str + length; + while (str < limit) + { + int ch = UTF8_GET (str, limit); + if (ch < 0) + { + fprintf (stream, "\\"); + return; + } + jni_print_char (stream, ch); + } + } +} + /* Print base name of class. The base name is everything after the final separator. */ @@ -648,20 +671,24 @@ DEFUN(print_method_info, (stream, jcf, name_index, sig_index, flags), if (! stream) return; - /* We can't generate a method whose name is a C++ reserved word. We - can't just ignore the function, because that will cause incorrect - code to be generated if the function is virtual (not only for - calls to this function for for other functions after it in the - vtbl). So we give it a dummy name instead. */ - override = cxx_keyword_subst (str, length); - if (override) + /* We don't worry about overrides in JNI mode. */ + if (! flag_jni) { - /* If the method is static or final, we can safely skip it. If - we don't skip it then we'll have problems since the mangling - will be wrong. FIXME. */ - if (METHOD_IS_FINAL (jcf->access_flags, flags) - || (flags & ACC_STATIC)) - return; + /* We can't generate a method whose name is a C++ reserved word. + We can't just ignore the function, because that will cause + incorrect code to be generated if the function is virtual + (not only for calls to this function for for other functions + after it in the vtbl). So we give it a dummy name instead. */ + override = cxx_keyword_subst (str, length); + if (override) + { + /* If the method is static or final, we can safely skip it. + If we don't skip it then we'll have problems since the + mangling will be wrong. FIXME. */ + if (METHOD_IS_FINAL (jcf->access_flags, flags) + || (flags & ACC_STATIC)) + return; + } } if (! stubs && ! flag_jni) -- 2.30.2