char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
char *newname = type_name_no_tag (type);
- int is_constructor = newname != NULL && STREQ (field_name, newname);
- int is_destructor = is_constructor && DESTRUCTOR_PREFIX_P (physname);
+ int is_constructor = (physname[0]=='_' && physname[1]=='_');
+ int is_destructor = DESTRUCTOR_PREFIX_P (physname);
/* Need a new type prefix. */
char *const_prefix = method->is_const ? "C" : "";
char *volatile_prefix = method->is_volatile ? "V" : "";
char buf[20];
-#ifndef GCC_MANGLE_BUG
+#ifdef GCC_MANGLE_BUG
int len = newname == NULL ? 0 : strlen (newname);
if (is_destructor)
strcat (mangled_name, buf);
/* If the class doesn't have a name, i.e. newname NULL, then we just
mangle it using 0 for the length of the class. Thus it gets mangled
- as something starting with `::' rather than `classname::'. */
+ as something starting with `::' rather than `classname::'. */
if (newname != NULL)
strcat (mangled_name, newname);
+
#else
char *opname;
struct partial_symtab *psymtab;
CORE_ADDR pc;
{
- struct partial_symbol *best, *p;
+ struct partial_symbol *best = NULL, *p;
CORE_ADDR best_pc;
if (!psymtab)
struct symtab **symtab;
{
register struct symbol *sym;
- register struct symtab *s;
+ register struct symtab *s = NULL;
register struct partial_symtab *ps;
struct blockvector *bv;
register struct objfile *objfile;
register struct block *b;
register struct minimal_symbol *msymbol;
- char *temp;
- extern char *gdb_completer_word_break_characters;
/* Search specified block and its superiors. */
will cause a core dump), but maybe we can successfully
continue, so let's not. */
warning ("\
-(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
+(Internal error: pc 0x%lx in read in psymtab, but not in symtab.)\n",
+ (unsigned long) pc);
s = PSYMTAB_TO_SYMTAB (ps);
}
return (s);
code in the middle of a subroutine. To properly find the end of a line's PC
range, we must search all symtabs associated with this compilation unit, and
find the one whose first PC is closer than that of the next line in this
- symtab.
-
- FIXME: We used to complain here about zero length or negative length line
- tables, but there are two problems with this: (1) some symtabs may not have
- any line numbers due to gcc -g1 compilation, and (2) this function is called
- during single stepping, when we don't own the terminal and thus can't
- produce any output. One solution might be to implement a mechanism whereby
- complaints can be queued until we regain control of the terminal. -fnf
- */
+ symtab. */
/* If it's worth the effort, we could be using a binary search. */
if (!l)
continue;
len = l->nitems;
- if (len <= 0) /* See FIXME above. */
+ if (len <= 0)
{
+ /* I think len can be zero if the symtab lacks line numbers
+ (e.g. gcc -g1). (Either that or the LINETABLE is NULL;
+ I'm not sure which, and maybe it depends on the symbol
+ reader). */
continue;
}
if ((copy[0] == copy [p - *argptr - 1])
&& strchr (gdb_completer_quote_characters, copy[0]) != NULL)
{
- char *temp;
copy [p - *argptr - 1] = '\0';
copy++;
}
printf_filtered ("\nNon-debugging symbols:\n");
found_in_file = 1;
}
- printf_filtered (" %08x %s\n",
- SYMBOL_VALUE_ADDRESS (msymbol),
+ printf_filtered (" %08lx %s\n",
+ (unsigned long) SYMBOL_VALUE_ADDRESS (msymbol),
SYMBOL_SOURCE_NAME (msymbol));
}
}
#define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
do { \
- completion_list_add_name (SYMBOL_NAME (symbol), (sym_text), (len), \
- (text), (word)); \
if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
+ /* Put only the mangled name on the list. */ \
+ /* Advantage: "b foo<TAB>" completes to "b foo(int, int)" */ \
+ /* Disadvantage: "b foo__i<TAB>" doesn't complete. */ \
completion_list_add_name \
(SYMBOL_DEMANGLED_NAME (symbol), (sym_text), (len), (text), (word)); \
+ else \
+ completion_list_add_name \
+ (SYMBOL_NAME (symbol), (sym_text), (len), (text), (word)); \
} while (0)
/* Test to see if the symbol specified by SYMNAME (which is already
{
char *p;
char quote_found;
- char *quote_pos;
+ char *quote_pos = NULL;
/* First see if this is a quoted string. */
quote_found = '\0';