diff options
author | Jason Merrill <merrill@gnu.org> | 1996-09-19 00:47:43 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1996-09-19 00:47:43 +0000 |
commit | c486ed79fd864ca0bf86a453206bd14ceae00992 (patch) | |
tree | fd9054355e2d88298c660b9da25b559ff1cfd84c /gcc/cplus-dem.c | |
parent | 777e434cf099a110b010a6bcbdfa431c2eec3636 (diff) | |
download | gcc-c486ed79fd864ca0bf86a453206bd14ceae00992.zip gcc-c486ed79fd864ca0bf86a453206bd14ceae00992.tar.gz gcc-c486ed79fd864ca0bf86a453206bd14ceae00992.tar.bz2 |
(demangle_template): Fix handling of address args.
(gnu_special): Handle type_info stuff.
From-SVN: r12746
Diffstat (limited to 'gcc/cplus-dem.c')
-rw-r--r-- | gcc/cplus-dem.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cplus-dem.c b/gcc/cplus-dem.c index 3ac1680..90969a9 100644 --- a/gcc/cplus-dem.c +++ b/gcc/cplus-dem.c @@ -1055,7 +1055,8 @@ demangle_template (work, mangled, tname, trawname) } else if (is_pointer) { - if (!get_count (mangled, &symbol_len)) + symbol_len = consume_count (mangled); + if (symbol_len == 0) { success = 0; break; @@ -1596,6 +1597,29 @@ gnu_special (work, mangled, declp) success = 0; } } + else if (strncmp (*mangled, "__t", 3) == 0 + && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f')) + { + p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function"; + (*mangled) += 4; + switch (**mangled) + { + case 'Q': + success = demangle_qualified (work, mangled, declp, 0, 1); + break; + case 't': + success = demangle_template (work, mangled, declp, 0); + break; + default: + n = consume_count (mangled); + string_appendn (declp, *mangled, n); + (*mangled) += n; + } + if (success && **mangled != '\0') + success = 0; + if (success) + string_append (declp, p); + } else { success = 0; |