class.c (cxx_keyword_p): Accept keywords with trailing `$'s.
authorTom Tromey <tromey@cygnus.com>
Sat, 4 Nov 2000 04:56:25 +0000 (04:56 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Sat, 4 Nov 2000 04:56:25 +0000 (04:56 +0000)
* class.c (cxx_keyword_p): Accept keywords with trailing `$'s.
* gjavah.c (cxx_keyword_subst): Handle any number of trailing
`$'.

From-SVN: r37243

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

index e62b217b14a22cacff9d5934c6672431747a9962..3aeede4d23ec7df4b673b9573afa59655dde3f91 100644 (file)
@@ -1,5 +1,9 @@
 2000-11-03  Tom Tromey  <tromey@cygnus.com>
 
+       * class.c (cxx_keyword_p): Accept keywords with trailing `$'s.
+       * gjavah.c (cxx_keyword_subst): Handle any number of trailing
+       `$'.
+
        * lex.h (_JAVA_IDENTIFIER_IGNORABLE): New macro.
        (JAVA_ID_CHAR_P): Also try java_ignorable_control_p.
        * lex.c (java_read_unicode): Removed `term_context' argument.
index 1b184975dfa8f92862f02096d6914f14dd5e273e..00cf42e6e8096766c6c346e30c84e978813af51d 100644 (file)
@@ -1961,11 +1961,23 @@ cxx_keyword_p (name, length)
        mid != old;
        old = mid, mid = (last + first) / 2)
     {
-      int r = utf8_cmp (name, length, cxx_keywords[mid]);
+      int kwl = strlen (cxx_keywords[mid]);
+      int min_length = kwl > length ? length : kwl;
+      int r = utf8_cmp (name, min_length, cxx_keywords[mid]);
 
       if (r == 0)
-       return 1;
-      else if (r < 0)
+       {
+         int i;
+         /* We've found a match if all the remaining characters are
+            `$'.  */
+         for (i = min_length; i < length && name[i] == '$'; ++i)
+           ;
+         if (i == length)
+           return 1;
+         r = 1;
+       }
+
+      if (r < 0)
        last = mid;
       else
        first = mid;
index 6aabf1c8adc0b1be9abb9b8a97a865c3df17e34d..f49b717c1999ddabc6cc91ef66e07edfba791a4a 100644 (file)
@@ -440,16 +440,32 @@ cxx_keyword_subst (str, length)
        mid != old;
        old = mid, mid = (last + first) / 2)
     {
-      int r = utf8_cmp (str, length, cxx_keywords[mid]);
+      int kwl = strlen (cxx_keywords[mid]);
+      int min_length = kwl > length ? length : kwl;
+      int r = utf8_cmp (str, min_length, cxx_keywords[mid]);
 
       if (r == 0)
        {
-         char *str = xmalloc (2 + strlen (cxx_keywords[mid]));
-         strcpy (str, cxx_keywords[mid]);
-         strcat (str, "$");
-         return str;
+         int i;
+
+         /* Skip all trailing `$'.  */
+         for (i = min_length; i < length && str[i] == '$'; ++i)
+           ;
+         /* We've only found a match if all the remaining characters
+            are `$'.  */
+         if (i == length)
+           {
+             char *dup = xmalloc (2 + length - min_length + kwl);
+             strcpy (dup, cxx_keywords[mid]);
+             for (i = kwl; i < length + 1; ++i)
+               dup[i] = '$';
+             dup[i] = '\0';
+             return dup;
+           }
+         r = 1;
        }
-      else if (r < 0)
+       
+      if (r < 0)
        last = mid;
       else
        first = mid;