From 8bf955e1b8d2d5d6327d28ab8c97c2c012b8f4cd Mon Sep 17 00:00:00 2001 From: Geoffrey Keating Date: Sun, 6 May 2007 00:25:11 +0000 Subject: [PATCH] * cp-demangle.c (d_name): Detect local-source-name. (d_prefix): Likewise. (d_unqualified_name): Implement local-source-name. --- libiberty/ChangeLog | 6 ++++++ libiberty/cp-demangle.c | 22 +++++++++++++++++++++- libiberty/testsuite/demangle-expected | 16 ++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 431ef1d..c4e7072 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2007-05-05 Geoffrey Keating + + * cp-demangle.c (d_name): Detect local-source-name. + (d_prefix): Likewise. + (d_unqualified_name): Implement local-source-name. + 2007-05-03 Joel Brobecker * filename_cmp.c: Replace include of ctype.h by include of diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 5c930c6..992b358 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -1100,6 +1100,9 @@ d_name (struct d_info *di) case 'Z': return d_local_name (di); + case 'L': + return d_unqualified_name (di); + case 'S': { int subst; @@ -1220,7 +1223,8 @@ d_prefix (struct d_info *di) if (IS_DIGIT (peek) || IS_LOWER (peek) || peek == 'C' - || peek == 'D') + || peek == 'D' + || peek == 'L') dc = d_unqualified_name (di); else if (peek == 'S') dc = d_substitution (di, 1); @@ -1254,6 +1258,9 @@ d_prefix (struct d_info *di) /* ::= ::= ::= + ::= + + ::= L */ static struct demangle_component * @@ -1275,6 +1282,19 @@ d_unqualified_name (struct d_info *di) } else if (peek == 'C' || peek == 'D') 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 return NULL; } diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 471819e..f1afc45 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -3842,3 +3842,19 @@ _ZNT --format=gnu-v3 _Z1aMark _Z1aMark +# test 1 +--format=gnu-v3 +_ZL3foo_2 +foo +# test 2 +--format=gnu-v3 +_ZZL3foo_2vE4var1 +foo()::var1 +# test 3 +--format=gnu-v3 +_ZZL3foo_2vE4var1_0 +foo()::var1 +# test 4 +--format=gnu-v3 +_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct +myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct) -- 2.7.4