aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/c-valprint.c8
-rw-r--r--gdb/valops.c35
3 files changed, 35 insertions, 15 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 37b4abd..be9fe6d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,12 @@
2002-02-03 Daniel Jacobowitz <drow@mvista.com>
+ * 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 <drow@mvista.com>
+
* gdbtypes.c (init_simd_type): Use TYPE_TAG_NAME instead of
accessing tag_name directly.
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index c9109f0..c094a17 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 f211753..6f7e251 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--;
+ }
}
}