home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: gnu.gdb.bug
- Path: sparky!uunet!cs.utexas.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!cse.ucsc.EDU!dlong
- From: dlong@cse.ucsc.EDU (Dean R. E. Long)
- Subject: gdb-4.7 patches
- Message-ID: <199301100951.AA22739@oak.ucsc.edu>
- Sender: gnulists@ai.mit.edu
- Organization: GNUs Not Usenet
- Distribution: gnu
- Date: Sat, 9 Jan 1993 17:51:05 GMT
- Approved: bug-gdb@prep.ai.mit.edu
- Lines: 215
-
- These patches fix a number of demangling bugs related to templates.
-
- dl
-
- -------------
- *** gdb/symtab.c.orig Fri Oct 9 09:44:31 1992
- --- gdb/symtab.c Fri Jan 8 22:48:48 1993
- ***************
- *** 2490,2501 ****
- int newsize;
- int i;
-
- - /* clip symbols that cannot match */
- -
- - if (!cplus_match (symname, text, text_len)) {
- - return;
- - }
- -
- /* matches mangled, may match unmangled. now clip any symbol names
- that we've already considered. (This is a time optimization) */
-
- --- 2490,2495 ----
- ***************
- *** 2516,2521 ****
- --- 2510,2521 ----
-
- symname = demangled;
- } else {
- + /* clip symbols that cannot match */
- +
- + if (!cplus_match (symname, text, text_len)) {
- + return;
- + }
- +
- symname = savestring (symname, strlen (symname));
- }
-
- *** libiberty/cplus-dem.c.orig Mon Oct 5 17:42:45 1992
- --- libiberty/cplus-dem.c Sun Jan 10 01:42:17 1993
- ***************
- *** 276,285 ****
- static void
- forget_types PARAMS ((struct work_stuff *));
-
- - #if 0
- static void
- string_prepends PARAMS ((string *, string *));
- - #endif
-
- /* Translate count to integer, consuming tokens in the process.
- Conversion terminates on the first non-digit character. */
- --- 276,283 ----
- ***************
- *** 669,675 ****
- }
- string_appendn (&tname, *mangled, r);
- string_appendn (&trawname, *mangled, r);
- - string_appendn (&trawname, "", 1);
- *mangled += r;
- string_append (&tname, "<");
- /* get size of template parameter list */
- --- 667,672 ----
- ***************
- *** 688,697 ****
- {
- (*mangled)++;
- success = do_type (work, mangled, &temp);
- - string_appendn (&temp, "", 1);
- if (success)
- {
- ! string_append (&tname, temp.b);
- }
- string_delete(&temp);
- if (!success)
- --- 685,693 ----
- {
- (*mangled)++;
- success = do_type (work, mangled, &temp);
- if (success)
- {
- ! string_appends (&tname, temp);
- }
- string_delete(&temp);
- if (!success)
- ***************
- *** 708,717 ****
- is_integral = 0;
- done = 0;
- success = do_type (work, mangled, &temp);
- - string_appendn (&temp, "", 1);
- if (success)
- {
- ! string_append (&tname, temp.b);
- }
- string_delete(&temp);
- if (!success)
- --- 704,712 ----
- is_integral = 0;
- done = 0;
- success = do_type (work, mangled, &temp);
- if (success)
- {
- ! string_appends (&tname, temp);
- }
- string_delete(&temp);
- if (!success)
- ***************
- *** 825,832 ****
- }
- if (work -> constructor || work -> destructor)
- {
- ! string_append (&tname, trawname.b);
- }
- string_delete(&trawname);
-
- if (!success)
- --- 820,833 ----
- }
- if (work -> constructor || work -> destructor)
- {
- ! string_appends (&tname, trawname);
- }
- + {
- + char buf[16];
- + sprintf(buf, "%d", trawname.p - trawname.b);
- + string_prepend(&trawname, buf);
- + remember_type(work, trawname.b, trawname.p - trawname.b);
- + }
- string_delete(&trawname);
-
- if (!success)
- ***************
- *** 835,841 ****
- }
- else
- {
- ! string_prepend (declp, tname.b);
- string_delete (&tname);
-
- if (work -> static_type)
- --- 836,842 ----
- }
- else
- {
- ! string_prepends (declp, tname);
- string_delete (&tname);
-
- if (work -> static_type)
- ***************
- *** 842,853 ****
- {
- string_append (declp, *mangled + 1);
- *mangled += strlen (*mangled);
- - success = 1;
- }
- ! else
- ! {
- ! success = demangle_args (work, mangled, declp);
- ! }
- }
- return (success);
- }
- --- 843,850 ----
- {
- string_append (declp, *mangled + 1);
- *mangled += strlen (*mangled);
- }
- ! success = 1;
- }
- return (success);
- }
- ***************
- *** 993,1001 ****
- success = 0;
- }
- }
- ! else if ((scan == *mangled) && (isdigit (scan[2]) || (scan[2] == 'Q')))
- {
- ! /* A GNU style constructor starts with "__<digit>" or "__Q". */
- work -> constructor = 1;
- *mangled = scan + 2;
- }
- --- 990,998 ----
- success = 0;
- }
- }
- ! else if ((scan == *mangled) && (isdigit (scan[2]) || (scan[2] == 't')))
- {
- ! /* A GNU style constructor starts with "__<digit>" or "__t". */
- work -> constructor = 1;
- *mangled = scan + 2;
- }
- ***************
- *** 2164,2171 ****
- }
- }
-
- - #if 0
- -
- static void
- string_prepends (p, s)
- string *p, *s;
- --- 2161,2166 ----
- ***************
- *** 2175,2182 ****
- string_prependn (p, s->b, s->p - s->b);
- }
- }
- -
- - #endif
-
- static void
- string_prependn (p, s, n)
- --- 2170,2175 ----
-
-