diff options
author | merrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-09-19 00:47:43 +0000 |
---|---|---|
committer | merrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-09-19 00:47:43 +0000 |
commit | 457e67adf94a1ac9d1bb296c9f6dc612845f9659 (patch) | |
tree | fd9054355e2d88298c660b9da25b559ff1cfd84c /gcc/cplus-dem.c | |
parent | 013be3e42ace1b1c511e022c6fb5db2442c1d372 (diff) | |
download | ppe42-gcc-457e67adf94a1ac9d1bb296c9f6dc612845f9659.tar.gz ppe42-gcc-457e67adf94a1ac9d1bb296c9f6dc612845f9659.zip |
(demangle_template): Fix handling of address args.
(gnu_special): Handle type_info stuff.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@12746 138bc75d-0d04-0410-961f-82ee72b054a4
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 3ac16808931..90969a9faed 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; |