class.c (cxx_keyword_p): Accept keywords with trailing `$'s.

* class.c (cxx_keyword_p): Accept keywords with trailing `$'s.
	* gjavah.c (cxx_keyword_subst): Handle any number of trailing
	`$'.

From-SVN: r37243
This commit is contained in:
Tom Tromey 2000-11-04 04:56:25 +00:00 committed by Tom Tromey
parent f132f529e0
commit 0160fbe150
3 changed files with 41 additions and 9 deletions

View 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.

View 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;

View 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;