2002-02-14 Daniel Jacobowitz <drow@mvista.com>

Fix part of PR gdb/267.
        * linespec.c (find_methods): Handle constructors specially for now.
This commit is contained in:
Daniel Jacobowitz 2002-02-14 23:40:23 +00:00
parent c53abaf150
commit 003d6d1dc8
2 changed files with 39 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2002-02-14 Daniel Jacobowitz <drow@mvista.com>
Fix part of PR gdb/267.
* linespec.c (find_methods): Handle constructors specially for now.
2002-02-14 Corinna Vinschen <vinschen@redhat.com>
* arm-tdep.c (arm_push_arguments): Eliminate special float type

View File

@ -202,6 +202,39 @@ find_methods (struct type *t, char *name, struct symbol **sym_arr)
*/
}
}
else if (strcmp_iw (class_name, name) == 0)
{
/* For GCC 3.x and stabs, constructors and destructors have names
like __base_ctor and __complete_dtor. Check the physname for now
if we're looking for a constructor. */
for (field_counter
= TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
field_counter >= 0;
--field_counter)
{
struct fn_field *f;
char *phys_name;
f = TYPE_FN_FIELDLIST1 (t, method_counter);
/* GCC 3.x will never produce stabs stub methods, so we don't need
to handle this case. */
if (TYPE_FN_FIELD_STUB (f, field_counter))
continue;
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
if (! is_constructor_name (phys_name))
continue;
/* If this method is actually defined, include it in the
list. */
sym_arr[i1] = lookup_symbol (phys_name,
NULL, VAR_NAMESPACE,
(int *) NULL,
(struct symtab **) NULL);
if (sym_arr[i1])
i1++;
}
}
}
}
@ -1180,7 +1213,7 @@ symbol_found: /* We also jump here from inside the C++ class/namespace
{
struct blockvector *bv = BLOCKVECTOR (sym_symtab);
struct block *b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
if (lookup_block_symbol (b, copy, VAR_NAMESPACE) != NULL)
if (lookup_block_symbol (b, copy, NULL, VAR_NAMESPACE) != NULL)
build_canonical_line_spec (values.sals, copy, canonical);
}
return values;