* ada-lang.c (is_name_suffix): Handle middle-name numeric suffixes
that are used to differentiate homonyms.
This commit is contained in:
parent
c18d3d891b
commit
babe1480e8
2 changed files with 24 additions and 14 deletions
|
@ -1,3 +1,8 @@
|
|||
2008-01-04 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* ada-lang.c (is_name_suffix): Handle middle-name numeric suffixes
|
||||
that are used to differentiate homonyms.
|
||||
|
||||
2008-01-04 Jerome Guitton <guitton@adacore.com>
|
||||
|
||||
* ada-lang.c (decode_packed_array_type): Avoid a seg fault
|
||||
|
|
|
@ -4934,12 +4934,14 @@ ada_lookup_symbol_nonlocal (const char *name,
|
|||
names (e.g., XVE) are not included here. Currently, the possible suffixes
|
||||
are given by either of the regular expression:
|
||||
|
||||
(__[0-9]+)?[.$][0-9]+ [nested subprogram suffix, on platforms such
|
||||
as GNU/Linux]
|
||||
___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
|
||||
_E[0-9]+[bs]$ [protected object entry suffixes]
|
||||
[.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
|
||||
___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
|
||||
_E[0-9]+[bs]$ [protected object entry suffixes]
|
||||
(X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
|
||||
*/
|
||||
|
||||
Also, any leading "__[0-9]+" sequence is skipped before the suffix
|
||||
match is performed. This sequence is used to differentiate homonyms,
|
||||
is an optional part of a valid name suffix. */
|
||||
|
||||
static int
|
||||
is_name_suffix (const char *str)
|
||||
|
@ -4948,20 +4950,20 @@ is_name_suffix (const char *str)
|
|||
const char *matching;
|
||||
const int len = strlen (str);
|
||||
|
||||
/* (__[0-9]+)?\.[0-9]+ */
|
||||
matching = str;
|
||||
/* Skip optional leading __[0-9]+. */
|
||||
|
||||
if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
|
||||
{
|
||||
matching += 3;
|
||||
while (isdigit (matching[0]))
|
||||
matching += 1;
|
||||
if (matching[0] == '\0')
|
||||
return 1;
|
||||
str += 3;
|
||||
while (isdigit (str[0]))
|
||||
str += 1;
|
||||
}
|
||||
|
||||
/* [.$][0-9]+ */
|
||||
|
||||
if (matching[0] == '.' || matching[0] == '$')
|
||||
if (str[0] == '.' || str[0] == '$')
|
||||
{
|
||||
matching += 1;
|
||||
matching = str + 1;
|
||||
while (isdigit (matching[0]))
|
||||
matching += 1;
|
||||
if (matching[0] == '\0')
|
||||
|
@ -4969,6 +4971,7 @@ is_name_suffix (const char *str)
|
|||
}
|
||||
|
||||
/* ___[0-9]+ */
|
||||
|
||||
if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
|
||||
{
|
||||
matching = str + 3;
|
||||
|
@ -5021,8 +5024,10 @@ is_name_suffix (const char *str)
|
|||
str += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (str[0] == '\000')
|
||||
return 1;
|
||||
|
||||
if (str[0] == '_')
|
||||
{
|
||||
if (str[1] != '_' || str[2] == '\000')
|
||||
|
|
Loading…
Add table
Reference in a new issue