From acf5ed49a0160dd452b2004034b847912f23940b Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Mon, 4 Feb 2002 02:14:46 +0000 Subject: [PATCH] 2002-02-03 Daniel Jacobowitz * c-valprint.c (c_val_print): Pass a proper valaddr to cp_print_class_method. * valops.c (search_struct_method): If there is only one method and args is NULL, return that method. --- gdb/ChangeLog | 7 +++++++ gdb/c-valprint.c | 8 ++++++-- gdb/valops.c | 35 ++++++++++++++++++++++------------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 37b4abda707..be9fe6d013d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2002-02-03 Daniel Jacobowitz + + * c-valprint.c (c_val_print): Pass a proper valaddr to + cp_print_class_method. + * valops.c (search_struct_method): If there is only one method + and args is NULL, return that method. + 2002-02-03 Daniel Jacobowitz * gdbtypes.c (init_simd_type): Use TYPE_TAG_NAME instead of diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index c9109f0fb80..c094a17ad88 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -441,8 +441,12 @@ c_val_print (struct type *type, char *valaddr, int embedded_offset, break; case TYPE_CODE_METHOD: - cp_print_class_method (valaddr + embedded_offset, lookup_pointer_type (type), stream); - break; + { + struct value *v = value_at (type, address, NULL); + cp_print_class_method (VALUE_CONTENTS (value_addr (v)), + lookup_pointer_type (type), stream); + break; + } case TYPE_CODE_VOID: fprintf_filtered (stream, "void"); diff --git a/gdb/valops.c b/gdb/valops.c index f211753c4a7..6f7e25141d6 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -2274,23 +2274,32 @@ search_struct_method (char *name, struct value **arg1p, if (j > 0 && args == 0) error ("cannot resolve overloaded method `%s': no arguments supplied", name); - while (j >= 0) + else if (j == 0 && args == 0) { if (TYPE_FN_FIELD_STUB (f, j)) check_stub_method (type, i, j); - if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j), - TYPE_FN_FIELD_ARGS (f, j), args)) - { - if (TYPE_FN_FIELD_VIRTUAL_P (f, j)) - return value_virtual_fn_field (arg1p, f, j, type, offset); - if (TYPE_FN_FIELD_STATIC_P (f, j) && static_memfuncp) - *static_memfuncp = 1; - v = value_fn_field (arg1p, f, j, type, offset); - if (v != NULL) - return v; - } - j--; + v = value_fn_field (arg1p, f, j, type, offset); + if (v != NULL) + return v; } + else + while (j >= 0) + { + if (TYPE_FN_FIELD_STUB (f, j)) + check_stub_method (type, i, j); + if (!typecmp (TYPE_FN_FIELD_STATIC_P (f, j), + TYPE_FN_FIELD_ARGS (f, j), args)) + { + if (TYPE_FN_FIELD_VIRTUAL_P (f, j)) + return value_virtual_fn_field (arg1p, f, j, type, offset); + if (TYPE_FN_FIELD_STATIC_P (f, j) && static_memfuncp) + *static_memfuncp = 1; + v = value_fn_field (arg1p, f, j, type, offset); + if (v != NULL) + return v; + } + j--; + } } } -- 2.30.2