This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RFC: [1/4] move check_field
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 27 Nov 2012 07:13:32 -0700
- Subject: RFC: [1/4] move check_field
This one is trivial.
I noticed check_field is only called from a single place, and I needed
to change it, so first I moved it to symtab.c and made it static.
Tested by rebuilding.
Tom
* symtab.c (check_field): Now static. Move from...
* valops.c (check_field): ... here. Remove.
* value.h (check_field): Don't declare.
---
gdb/symtab.c | 36 ++++++++++++++++++++++++++++++++++++
gdb/valops.c | 36 ------------------------------------
gdb/value.h | 2 --
3 files changed, 36 insertions(+), 38 deletions(-)
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 05943cf..c1eab45 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -1277,6 +1277,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 502fb0d..924b56d 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 3685935..7127903 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -912,8 +912,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);
--
1.7.7.6