+2020-09-15 Tom Tromey <tom@tromey.com>
+
+ * rust-lang.c (rust_value_print_inner): Remove TYPE_CODE_MEMBERPTR
+ and TYPE_CODE_METHODPTR cases.
+ * c-valprint.c (c_value_print_memberptr): Move to valprint.c.
+ (c_value_print_inner): Update.
+ * valprint.c (generic_value_print_memberptr): New function, from
+ c_value_print_memberptr.
+ (generic_value_print): Use it. Call cplus_print_method_ptr.
+
2020-09-15 Tom Tromey <tromey@adacore.com>
* python/python-internal.h (PyInt_FromLong): Remove define.
}
}
-/* c_value_print helper for TYPE_CODE_MEMBERPTR. */
-
-static void
-c_value_print_memberptr (struct value *val, struct ui_file *stream,
- int recurse,
- const struct value_print_options *options)
-{
- if (!options->format)
- {
- struct type *type = check_typedef (value_type (val));
- const gdb_byte *valaddr = value_contents_for_printing (val);
- cp_print_class_member (valaddr, type, stream, "&");
- }
- else
- generic_value_print (val, stream, recurse, options, &c_decorations);
-}
-
/* See c-lang.h. */
void
const struct value_print_options *options)
{
struct type *type = value_type (val);
- const gdb_byte *valaddr = value_contents_for_printing (val);
type = check_typedef (type);
switch (type->code ())
c_value_print_array (val, stream, recurse, options);
break;
- case TYPE_CODE_METHODPTR:
- cplus_print_method_ptr (valaddr, type, stream);
- break;
-
case TYPE_CODE_PTR:
c_value_print_ptr (val, stream, recurse, options);
break;
c_value_print_int (val, stream, options);
break;
+ case TYPE_CODE_METHODPTR:
case TYPE_CODE_MEMBERPTR:
- c_value_print_memberptr (val, stream, recurse, options);
- break;
-
case TYPE_CODE_REF:
case TYPE_CODE_RVALUE_REF:
case TYPE_CODE_ENUM:
}
goto generic_print;
- case TYPE_CODE_METHODPTR:
- case TYPE_CODE_MEMBERPTR:
- c_value_print_inner (val, stream, recurse, &opts);
- break;
-
case TYPE_CODE_INT:
/* Recognize the unit type. */
if (type->is_unsigned () && TYPE_LENGTH (type) == 0
#include "gdbarch.h"
#include "cli/cli-style.h"
#include "count-one-bits.h"
+#include "c-lang.h"
+#include "cp-abi.h"
/* Maximum number of wchars returned from wchar_iterate. */
#define MAX_WCHARS 4
fprintf_filtered (stream, "%s", decorations->complex_suffix);
}
+/* generic_value_print helper for TYPE_CODE_MEMBERPTR. */
+
+static void
+generic_value_print_memberptr
+ (struct value *val, struct ui_file *stream,
+ int recurse,
+ const struct value_print_options *options,
+ const struct generic_val_print_decorations *decorations)
+{
+ if (!options->format)
+ {
+ /* Member pointers are essentially specific to C++, and so if we
+ encounter one, we should print it according to C++ rules. */
+ struct type *type = check_typedef (value_type (val));
+ const gdb_byte *valaddr = value_contents_for_printing (val);
+ cp_print_class_member (valaddr, type, stream, "&");
+ }
+ else
+ generic_value_print (val, stream, recurse, options, decorations);
+}
+
/* See valprint.h. */
void
break;
case TYPE_CODE_MEMBERPTR:
- value_print_scalar_formatted (val, options, 0, stream);
+ generic_value_print_memberptr (val, stream, recurse, options,
+ decorations);
break;
case TYPE_CODE_PTR:
generic_value_print_complex (val, stream, options, decorations);
break;
+ case TYPE_CODE_METHODPTR:
+ cplus_print_method_ptr (value_contents_for_printing (val), type,
+ stream);
+ break;
+
case TYPE_CODE_UNION:
case TYPE_CODE_STRUCT:
- case TYPE_CODE_METHODPTR:
default:
error (_("Unhandled type code %d in symbol table."),
type->code ());