From 2dc3df72a7ffca9a893ae41db8c3788c0019d59c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 14 Dec 2012 17:16:16 +0000 Subject: [PATCH] * symtab.c (check_field): Now static. Move from... * valops.c (check_field): ... here. Remove. * value.h (check_field): Don't declare. --- gdb/ChangeLog | 6 ++++++ gdb/symtab.c | 36 ++++++++++++++++++++++++++++++++++++ gdb/valops.c | 36 ------------------------------------ gdb/value.h | 2 -- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b8dee93..b33c142 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2012-12-14 Tom Tromey + * symtab.c (check_field): Now static. Move from... + * valops.c (check_field): ... here. Remove. + * value.h (check_field): Don't declare. + +2012-12-14 Tom Tromey + * NEWS: Mention "info proc" and core files. * corelow.c (core_info_proc): New function. (init_core_ops): Set to_info_proc. diff --git a/gdb/symtab.c b/gdb/symtab.c index 1b0b35b..1de3454 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1278,6 +1278,42 @@ lookup_language_this (const struct language_defn *lang, return NULL; } +/* Given TYPE, a structure/union, + return 1 if the component named NAME from the ultimate target + structure/union is defined, otherwise, return 0. */ + +static int +check_field (struct type *type, const char *name) +{ + int i; + + /* The type may be a stub. */ + CHECK_TYPEDEF (type); + + for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) + { + const char *t_field_name = TYPE_FIELD_NAME (type, i); + + if (t_field_name && (strcmp_iw (t_field_name, name) == 0)) + return 1; + } + + /* C++: If it was not found as a data field, then try to return it + as a pointer to a method. */ + + for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i) + { + if (strcmp_iw (TYPE_FN_FIELDLIST_NAME (type, i), name) == 0) + return 1; + } + + for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--) + if (check_field (TYPE_BASECLASS (type, i), name)) + return 1; + + return 0; +} + /* Behave like lookup_symbol except that NAME is the natural name (e.g., demangled name) of the symbol that we're looking for. */ diff --git a/gdb/valops.c b/gdb/valops.c index 372f118..fada3a5 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -3180,42 +3180,6 @@ destructor_name_p (const char *name, struct type *type) return 0; } -/* Given TYPE, a structure/union, - return 1 if the component named NAME from the ultimate target - structure/union is defined, otherwise, return 0. */ - -int -check_field (struct type *type, const char *name) -{ - int i; - - /* The type may be a stub. */ - CHECK_TYPEDEF (type); - - for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) - { - const char *t_field_name = TYPE_FIELD_NAME (type, i); - - if (t_field_name && (strcmp_iw (t_field_name, name) == 0)) - return 1; - } - - /* C++: If it was not found as a data field, then try to return it - as a pointer to a method. */ - - for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i) - { - if (strcmp_iw (TYPE_FN_FIELDLIST_NAME (type, i), name) == 0) - return 1; - } - - for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--) - if (check_field (TYPE_BASECLASS (type, i), name)) - return 1; - - return 0; -} - /* C++: Given an aggregate type CURTYPE, and a member name NAME, return the appropriate member (or the address of the member, if WANT_ADDRESS). This function is used to resolve user expressions diff --git a/gdb/value.h b/gdb/value.h index 7a23715..1b7b679 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -913,8 +913,6 @@ extern void print_variable_and_value (const char *name, struct ui_file *stream, int indent); -extern int check_field (struct type *, const char *); - extern void typedef_print (struct type *type, struct symbol *news, struct ui_file *stream); -- 2.7.4