* cp-demangle.c (d_name): Detect local-source-name.

(d_prefix): Likewise.
	(d_unqualified_name): Implement local-source-name.
This commit is contained in:
Geoffrey Keating 2007-05-06 00:25:11 +00:00
parent f362a21175
commit 8bf955e1b8
3 changed files with 43 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2007-05-05 Geoffrey Keating <geoffk@apple.com>
* cp-demangle.c (d_name): Detect local-source-name.
(d_prefix): Likewise.
(d_unqualified_name): Implement local-source-name.
2007-05-03 Joel Brobecker <brobecker@adacore.com> 2007-05-03 Joel Brobecker <brobecker@adacore.com>
* filename_cmp.c: Replace include of ctype.h by include of * filename_cmp.c: Replace include of ctype.h by include of

View file

@ -1100,6 +1100,9 @@ d_name (struct d_info *di)
case 'Z': case 'Z':
return d_local_name (di); return d_local_name (di);
case 'L':
return d_unqualified_name (di);
case 'S': case 'S':
{ {
int subst; int subst;
@ -1220,7 +1223,8 @@ d_prefix (struct d_info *di)
if (IS_DIGIT (peek) if (IS_DIGIT (peek)
|| IS_LOWER (peek) || IS_LOWER (peek)
|| peek == 'C' || peek == 'C'
|| peek == 'D') || peek == 'D'
|| peek == 'L')
dc = d_unqualified_name (di); dc = d_unqualified_name (di);
else if (peek == 'S') else if (peek == 'S')
dc = d_substitution (di, 1); dc = d_substitution (di, 1);
@ -1254,6 +1258,9 @@ d_prefix (struct d_info *di)
/* <unqualified-name> ::= <operator-name> /* <unqualified-name> ::= <operator-name>
::= <ctor-dtor-name> ::= <ctor-dtor-name>
::= <source-name> ::= <source-name>
::= <local-source-name>
<local-source-name> ::= L <source-name> <discriminator>
*/ */
static struct demangle_component * static struct demangle_component *
@ -1275,6 +1282,19 @@ d_unqualified_name (struct d_info *di)
} }
else if (peek == 'C' || peek == 'D') else if (peek == 'C' || peek == 'D')
return d_ctor_dtor_name (di); return d_ctor_dtor_name (di);
else if (peek == 'L')
{
struct demangle_component * ret;
d_advance (di, 1);
ret = d_source_name (di);
if (ret == NULL)
return NULL;
if (! d_discriminator (di))
return NULL;
return ret;
}
else else
return NULL; return NULL;
} }

View file

@ -3842,3 +3842,19 @@ _ZNT
--format=gnu-v3 --format=gnu-v3
_Z1aMark _Z1aMark
_Z1aMark _Z1aMark
# <local-source-name> test 1
--format=gnu-v3
_ZL3foo_2
foo
# <local-source-name> test 2
--format=gnu-v3
_ZZL3foo_2vE4var1
foo()::var1
# <local-source-name> test 3
--format=gnu-v3
_ZZL3foo_2vE4var1_0
foo()::var1
# <local-source-name> test 4
--format=gnu-v3
_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)