diff options
author | Tom Tromey <tromey@redhat.com> | 2008-10-28 17:19:58 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2008-10-28 17:19:58 +0000 |
commit | 79a45b7d67b37d45cdb44d3ee2761a768474dd73 (patch) | |
tree | 27cb759eb2c872534a37cf9aef25a5ceabc47bd4 /gdb/ada-valprint.c | |
parent | 7c8a8b0498cb16b1a36e3210977eae12cca98f64 (diff) | |
download | gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.zip gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.tar.gz gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.tar.bz2 |
gdb
* varobj.c (value_get_print_value): Include valprint.h.
(value_get_print_value): Use get_formatted_print_options.
* value.h (struct value_print_options): Declare.
(value_print, val_print, common_val_print, val_print_string):
Update.
* value.c: Include valprint.h.
(show_values): Use get_user_print_options.
(show_convenience): Likewise.
* valprint.h (prettyprint_arrays, prettyprint_structs): Don't
declare.
(struct value_print_options): New type.
(vtblprint, unionprint, addressprint, objectprint, print_max,
inspect_it, repeat_count_threshold, output_format,
stop_print_at_null): Don't declare.
(user_print_options, get_user_print_options,
get_raw_print_options, get_formatted_print_options): Declare.
(print_array_indexes_p): Don't declare.
(maybe_print_array_index, val_print_array_elements): Update.
* valprint.c (print_max): Remove.
(user_print_options): New global.
(get_user_print_options, get_raw_print_options,
get_formatted_print_options): New functions.
(print_array_indexes, repeat_count_threshold, stop_print_at_null,
prettyprint_structs, prettyprint_arrays, unionprint,
addressprint): Remove.
(val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
(common_val_print): Likewise.
(print_array_indexes_p): Remove.
(maybe_print_array_index): Remove format, pretty arguments; add
options. Update.
(val_print_array_elements): Remove format, deref_ref, pretty
arguments; add options. Update.
(val_print_string): Add options argument. Update.
(_initialize_valprint): Use user_print_options.
(output_format): Remove.
(set_output_radix_1): Use user_print_options.
* typeprint.c: Include valprint.h.
(objectprint): Don't declare.
(whatis_exp): Use get_user_print_options.
* tui/tui-regs.c: Include valprint.h.
(tui_register_format): Use get_formatted_print_options.
* tracepoint.c: Include valprint.h.
(addressprint): Don't declare.
(trace_mention): Use get_user_print_options.
(tracepoints_info): Likewise.
* stack.c (print_frame_args): Use get_raw_print_options.
(print_frame_info): Use get_user_print_options.
(print_frame): Likewise.
* sh64-tdep.c: Include valprint.h
(sh64_do_register): Use get_formatted_print_options.
* scm-valprint.c (scm_inferior_print): Remove format, deref_ref,
pretty arguments; add options.
(scm_scmlist_print): Likewise. Update.
(scm_scmval_print): Likewise.
(scm_val_print): Likewise.
(scm_value_print): Remove format, pretty arguments; add options.
Update.
* scm-lang.h (scm_value_print, scm_val_print, scm_scmval_print):
Update.
* scm-lang.c (scm_printstr): Add options argument.
* python/python-value.c: Include valprint.h.
(valpy_str): Use get_user_print_options.
* printcmd.c: Include valprint.h.
(addressprint): Don't declare.
(inspect_it): Remove.
(print_formatted): Remove format option; add options. Update.
(print_scalar_formatted): Likewise.
(print_address_demangle): Use get_user_print_options.
(do_examine): Use get_formatted_print_options.
(print_command_1): Likewise.
(output_command): Use get_formatted_print_options.
(do_one_display): Likewise.
(print_variable_value): Use get_user_print_options.
* p-valprint.c (pascal_val_print): Remove format, deref_ref,
pretty arguments; add options. Update.
(pascal_value_print): Remove format, pretty arguments; add
options. Update.
(vtblprint, objectprint): Don't declare.
(pascal_static_field_print): Remove.
(pascal_object_print_value_fields): Remove format, pretty
arguments; add options. Update.
(pascal_object_print_static_field): Likewise.
(_initialize_pascal_valprint): Use user_print_options. Update.
* p-lang.h (pascal_val_print, pascal_value_print,
pascal_printstr, pascal_object_print_value_fields): Update.
(vtblprint, static_field_print): Don't declare.
* p-lang.c (pascal_printstr): Add options argument. Update.
* objc-lang.c (objc_printstr): Add options argument. Update.
* mt-tdep.c: Include valprint.h.
(mt_registers_info): Use get_raw_print_options.
* mips-tdep.c: Include valprint.h.
(mips_print_fp_register): Use get_formatted_print_options.
(mips_print_register): Likewise.
* mi/mi-main.c: Include valprint.h.
(get_register): Use get_user_print_options.
(mi_cmd_data_evaluate_expression): Likewise.
(mi_cmd_data_read_memory): Use get_formatted_print_options.
* mi/mi-cmd-stack.c: Include valprint.h.
(list_args_or_locals): Use get_raw_print_options.
* m2-valprint.c (print_function_pointer_address): Add addressprint
argument.
(m2_print_long_set): Remove format, pretty arguments.
(m2_print_unbounded_array): Remove format, deref_ref, pretty
arguments; add options. Update.
(print_unpacked_pointer): Remove format argument; add options.
Now static. Update.
(print_variable_at_address): Remove format, deref_ref, pretty
arguments; add options. Update.
(m2_print_array_contents): Likewise.
(m2_val_print): Likewise.
* m2-lang.h (m2_val_print): Update.
* m2-lang.c (m2_printstr): Add options argument. Update.
* language.h (struct value_print_options): Declare.
(struct language_defn) <la_printstr>: Add options argument.
<la_val_print>: Remove format, deref_ref, pretty argument; add
options.
<la_value_print>: Remove format, pretty arguments; add options.
<la_print_array_index>: Likewise.
(LA_VAL_PRINT, LA_VALUE_PRINT, LA_PRINT_STRING,
LA_PRINT_ARRAY_INDEX): Update.
(default_print_array_index): Update.
* language.c (default_print_array_index): Remove format, pretty
arguments; add options. Update.
(unk_lang_printstr): Add options argument.
(unk_lang_val_print): Remove format, deref_ref, pretty arguments;
add options.
(unk_lang_value_print): Remove format, pretty arguments; add
options.
* jv-valprint.c (java_value_print): Remove format, pretty
arguments; add options. Update.
(java_print_value_fields): Likewise.
(java_val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
* jv-lang.h (java_val_print, java_value_print): Declare.
* infcmd.c: Include valprint.h.
(print_return_value): Use get_raw_print_options.
(default_print_registers_info): Use get_user_print_options,
get_formatted_print_options.
(registers_info): Use get_formatted_print_options.
* gdbtypes.h (struct value_print_options): Declare.
(print_scalar_formatted): Update.
* f-valprint.c (f77_print_array_1): Remove format, deref_ref,
pretty arguments; add options. Update.
(f77_print_array): Likewise.
(f_val_print): Likewise.
* f-lang.h (f_val_print): Update.
* f-lang.c (f_printstr): Add options argument. Update.
(c_value_print): Update declaration.
* expprint.c: Include valprint.h.
(print_subexp_standard): Use get_raw_print_options,
get_user_print_options.
* eval.c: Include valprint.h.
(objectprint): Don't declare.
(evaluate_subexp_standard): Use get_user_print_options.
* cp-valprint.c (vtblprint, objectprint, static_field_print):
Remove.
(cp_print_value_fields): Remove format, pretty arguments; add
options. Update.
(cp_print_value): Likewise.
(cp_print_static_field): Likewise.
(_initialize_cp_valprint): Use user_print_options. Update.
* c-valprint.c (print_function_pointer_address): Add addressprint
argument.
(c_val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
(c_value_print): Add options argument. Update.
* c-lang.h (c_val_print, c_value_print, c_printstr): Update.
(vtblprint, static_field_print): Don't declare.
(cp_print_value_fields): Update.
* c-lang.c (c_printstr): Add options argument. Update.
* breakpoint.c: Include valprint.h.
(addressprint): Don't declare.
(watchpoint_value_print): Use get_user_print_options.
(print_one_breakpoint_location): Likewise.
(breakpoint_1, print_it_catch_fork, print_it_catch_vfork, mention,
print_exception_catchpoint): Likewise.
* auxv.c (fprint_target_auxv): Don't declare addressprint. Use
get_user_print_options.
* ada-valprint.c (struct ada_val_print_args): Remove format,
deref_ref, and pretty; add options.
(print_optional_low_bound): Add options argument.
(val_print_packed_array_elements): Remove format and pretty
arguments; add options. Update.
(printstr): Add options argument. Update.
(ada_printstr): Likewise.
(ada_val_print): Remove format, deref_ref, pretty arguments; add
options argument. Update.
(ada_val_print_stub): Update.
(ada_val_print_array): Remove format, deref_ref, pretty arguments;
add options. Update.
(ada_val_print_1): Likewise.
(print_variant_part): Likewise.
(ada_value_print): Remove format, pretty arguments; add options.
Update.
(print_record): Likewise.
(print_field_values): Likewise.
* ada-lang.h (ada_val_print, ada_value_print, ada_printstr):
Update.
* ada-lang.c (ada_print_array_index): Add options argument; remove
format and pretty arguments.
(print_one_exception): Use get_user_print_options.
gdb/testsuite
* gdb.base/exprs.exp (test_expr): Add enum formatting tests.
Diffstat (limited to 'gdb/ada-valprint.c')
-rw-r--r-- | gdb/ada-valprint.c | 218 |
1 files changed, 111 insertions, 107 deletions
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index e2f7740..cc8352f 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -43,18 +43,17 @@ struct ada_val_print_args int embedded_offset; CORE_ADDR address; struct ui_file *stream; - int format; - int deref_ref; int recurse; - enum val_prettyprint pretty; + const struct value_print_options *options; }; static void print_record (struct type *, const gdb_byte *, struct ui_file *, - int, int, enum val_prettyprint); + int, const struct value_print_options *); static int print_field_values (struct type *, const gdb_byte *, - struct ui_file *, int, int, - enum val_prettyprint, int, struct type *, + struct ui_file *, int, + const struct value_print_options *, + int, struct type *, const gdb_byte *); static void adjust_type_signedness (struct type *); @@ -62,8 +61,8 @@ static void adjust_type_signedness (struct type *); static int ada_val_print_stub (void *args0); static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR, - struct ui_file *, int, int, int, - enum val_prettyprint); + struct ui_file *, int, + const struct value_print_options *); /* Make TYPE unsigned if its range of values includes no negatives. */ @@ -81,13 +80,14 @@ adjust_type_signedness (struct type *type) otherwise 0. */ static int -print_optional_low_bound (struct ui_file *stream, struct type *type) +print_optional_low_bound (struct ui_file *stream, struct type *type, + const struct value_print_options *options) { struct type *index_type; long low_bound; long high_bound; - if (print_array_indexes_p ()) + if (options->print_array_indexes) return 0; if (!get_array_bounds (type, &low_bound, &high_bound)) @@ -137,16 +137,15 @@ print_optional_low_bound (struct ui_file *stream, struct type *type) /* Version of val_print_array_elements for GNAT-style packed arrays. Prints elements of packed array of type TYPE at bit offset - BITOFFSET from VALADDR on STREAM. Formats according to FORMAT and + BITOFFSET from VALADDR on STREAM. Formats according to OPTIONS and separates with commas. RECURSE is the recursion (nesting) level. - If PRETTY, uses "prettier" format. TYPE must have been decoded (as - by ada_coerce_to_simple_array). */ + TYPE must have been decoded (as by ada_coerce_to_simple_array). */ static void val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, int bitoffset, struct ui_file *stream, - int format, int recurse, - enum val_prettyprint pretty) + int recurse, + const struct value_print_options *options) { unsigned int i; unsigned int things_printed = 0; @@ -172,14 +171,14 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, i = 0; annotate_array_section_begin (i, elttype); - while (i < len && things_printed < print_max) + while (i < len && things_printed < options->print_max) { struct value *v0, *v1; int i0; if (i != 0) { - if (prettyprint_arrays) + if (options->prettyprint_arrays) { fprintf_filtered (stream, ",\n"); print_spaces_filtered (2 + 2 * recurse, stream); @@ -190,7 +189,7 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, } } wrap_here (n_spaces (2 + 2 * recurse)); - maybe_print_array_index (index_type, i + low, stream, format, pretty); + maybe_print_array_index (index_type, i + low, stream, options); i0 = i; v0 = ada_value_primitive_packed_val (NULL, valaddr, @@ -210,10 +209,12 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, break; } - if (i - i0 > repeat_count_threshold) + if (i - i0 > options->repeat_count_threshold) { - val_print (elttype, value_contents (v0), 0, 0, stream, format, - 0, recurse + 1, pretty, current_language); + struct value_print_options opts = *options; + opts.deref_ref = 0; + val_print (elttype, value_contents (v0), 0, 0, stream, + recurse + 1, &opts, current_language); annotate_elt_rep (i - i0); fprintf_filtered (stream, _(" <repeats %u times>"), i - i0); annotate_elt_rep_end (); @@ -222,11 +223,13 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, else { int j; + struct value_print_options opts = *options; + opts.deref_ref = 0; for (j = i0; j < i; j += 1) { if (j > i0) { - if (prettyprint_arrays) + if (options->prettyprint_arrays) { fprintf_filtered (stream, ",\n"); print_spaces_filtered (2 + 2 * recurse, stream); @@ -237,10 +240,10 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, j + low, - stream, format, pretty); + stream, options); } - val_print (elttype, value_contents (v0), 0, 0, stream, format, - 0, recurse + 1, pretty, current_language); + val_print (elttype, value_contents (v0), 0, 0, stream, + recurse + 1, &opts, current_language); annotate_elt (); } } @@ -452,7 +455,8 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream) static void printstr (struct ui_file *stream, const gdb_byte *string, - unsigned int length, int force_ellipses, int type_len) + unsigned int length, int force_ellipses, int type_len, + const struct value_print_options *options) { unsigned int i; unsigned int things_printed = 0; @@ -465,7 +469,7 @@ printstr (struct ui_file *stream, const gdb_byte *string, return; } - for (i = 0; i < length && things_printed < print_max; i += 1) + for (i = 0; i < length && things_printed < options->print_max; i += 1) { /* Position of the character we are examining to see whether it is repeated. */ @@ -491,11 +495,11 @@ printstr (struct ui_file *stream, const gdb_byte *string, reps += 1; } - if (reps > repeat_count_threshold) + if (reps > options->repeat_count_threshold) { if (in_quotes) { - if (inspect_it) + if (options->inspect_it) fputs_filtered ("\\\", ", stream); else fputs_filtered ("\", ", stream); @@ -507,14 +511,14 @@ printstr (struct ui_file *stream, const gdb_byte *string, fputs_filtered ("'", stream); fprintf_filtered (stream, _(" <repeats %u times>"), reps); i = rep1 - 1; - things_printed += repeat_count_threshold; + things_printed += options->repeat_count_threshold; need_comma = 1; } else { if (!in_quotes) { - if (inspect_it) + if (options->inspect_it) fputs_filtered ("\\\"", stream); else fputs_filtered ("\"", stream); @@ -529,7 +533,7 @@ printstr (struct ui_file *stream, const gdb_byte *string, /* Terminate the quotes if necessary. */ if (in_quotes) { - if (inspect_it) + if (options->inspect_it) fputs_filtered ("\\\"", stream); else fputs_filtered ("\"", stream); @@ -541,36 +545,28 @@ printstr (struct ui_file *stream, const gdb_byte *string, void ada_printstr (struct ui_file *stream, const gdb_byte *string, - unsigned int length, int width, int force_ellipses) + unsigned int length, int width, int force_ellipses, + const struct value_print_options *options) { - printstr (stream, string, length, force_ellipses, width); + printstr (stream, string, length, force_ellipses, width, options); } /* Print data of type TYPE located at VALADDR (within GDB), which came from the inferior at address ADDRESS, onto stdio stream STREAM according to - FORMAT (a letter as for the printf % codes or 0 for natural format). - The data at VALADDR is in target byte order. + OPTIONS. The data at VALADDR is in target byte order. If the data is printed as a string, returns the number of string characters printed. - If DEREF_REF is nonzero, then dereference references, otherwise just print - them like pointers. - RECURSE indicates the amount of indentation to supply before - continuation lines; this amount is roughly twice the value of RECURSE. - - When PRETTY is non-zero, prints record fields on separate lines. - (For some reason, the current version of gdb instead uses a global - variable---prettyprint_arrays--- to causes a similar effect on - arrays.) */ + continuation lines; this amount is roughly twice the value of RECURSE. */ int ada_val_print (struct type *type, const gdb_byte *valaddr0, int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int format, int deref_ref, - int recurse, enum val_prettyprint pretty) + struct ui_file *stream, int recurse, + const struct value_print_options *options) { struct ada_val_print_args args; args.type = type; @@ -578,10 +574,8 @@ ada_val_print (struct type *type, const gdb_byte *valaddr0, args.embedded_offset = embedded_offset; args.address = address; args.stream = stream; - args.format = format; - args.deref_ref = deref_ref; args.recurse = recurse; - args.pretty = pretty; + args.options = options; return catch_errors (ada_val_print_stub, &args, NULL, RETURN_MASK_ALL); } @@ -594,8 +588,7 @@ ada_val_print_stub (void *args0) struct ada_val_print_args *argsp = (struct ada_val_print_args *) args0; return ada_val_print_1 (argsp->type, argsp->valaddr0, argsp->embedded_offset, argsp->address, - argsp->stream, argsp->format, argsp->deref_ref, - argsp->recurse, argsp->pretty); + argsp->stream, argsp->recurse, argsp->options); } /* Assuming TYPE is a simple array, print the value of this array located @@ -605,8 +598,8 @@ ada_val_print_stub (void *args0) static int ada_val_print_array (struct type *type, const gdb_byte *valaddr, - CORE_ADDR address, struct ui_file *stream, int format, - int deref_ref, int recurse, enum val_prettyprint pretty) + CORE_ADDR address, struct ui_file *stream, int recurse, + const struct value_print_options *options) { struct type *elttype = TYPE_TARGET_TYPE (type); unsigned int eltlen; @@ -623,40 +616,40 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr, len = TYPE_LENGTH (type) / eltlen; /* For an array of chars, print with string syntax. */ - if (ada_is_string_type (type) && (format == 0 || format == 's')) + if (ada_is_string_type (type) + && (options->format == 0 || options->format == 's')) { - if (prettyprint_arrays) + if (options->prettyprint_arrays) print_spaces_filtered (2 + 2 * recurse, stream); /* If requested, look for the first null char and only print elements up to it. */ - if (stop_print_at_null) + if (options->stop_print_at_null) { int temp_len; /* Look for a NULL char. */ for (temp_len = 0; (temp_len < len - && temp_len < print_max + && temp_len < options->print_max && char_at (valaddr, temp_len, eltlen) != 0); temp_len += 1); len = temp_len; } - printstr (stream, valaddr, len, 0, eltlen); + printstr (stream, valaddr, len, 0, eltlen, options); result = len; } else { fprintf_filtered (stream, "("); - print_optional_low_bound (stream, type); + print_optional_low_bound (stream, type, options); if (TYPE_FIELD_BITSIZE (type, 0) > 0) val_print_packed_array_elements (type, valaddr, 0, stream, - format, recurse, pretty); + recurse, options); else val_print_array_elements (type, valaddr, address, stream, - format, deref_ref, recurse, - pretty, 0); + recurse, options, 0); fprintf_filtered (stream, ")"); } @@ -669,8 +662,8 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr, static int ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int format, - int deref_ref, int recurse, enum val_prettyprint pretty) + struct ui_file *stream, int recurse, + const struct value_print_options *options) { unsigned int len; int i; @@ -695,8 +688,7 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, } else retn = ada_val_print_1 (value_type (val), value_contents (val), 0, - VALUE_ADDRESS (val), stream, format, - deref_ref, recurse, pretty); + VALUE_ADDRESS (val), stream, recurse, options); value_free_to_mark (mark); return retn; } @@ -709,12 +701,12 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, { default: return c_val_print (type, valaddr0, embedded_offset, address, stream, - format, deref_ref, recurse, pretty); + recurse, options); case TYPE_CODE_PTR: { int ret = c_val_print (type, valaddr0, embedded_offset, address, - stream, format, deref_ref, recurse, pretty); + stream, recurse, options); if (ada_is_tag_type (type)) { struct value *val = @@ -778,20 +770,22 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, value_from_contents_and_address (type, valaddr, 0)); return ada_val_print_1 (target_type, value_contents (v), 0, 0, - stream, format, 0, recurse + 1, pretty); + stream, recurse + 1, options); } else return ada_val_print_1 (TYPE_TARGET_TYPE (type), valaddr0, embedded_offset, - address, stream, format, deref_ref, - recurse, pretty); + address, stream, recurse, options); } else { - format = format ? format : output_format; + int format = (options->format ? options->format + : options->output_format); if (format) { - print_scalar_formatted (valaddr, type, format, 0, stream); + struct value_print_options opts = *options; + opts.format = format; + print_scalar_formatted (valaddr, type, &opts, 0, stream); } else if (ada_is_system_address_type (type) && TYPE_OBJFILE (type) != NULL) @@ -830,9 +824,9 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, } case TYPE_CODE_ENUM: - if (format) + if (options->format) { - print_scalar_formatted (valaddr, type, format, 0, stream); + print_scalar_formatted (valaddr, type, options, 0, stream); break; } len = TYPE_NFIELDS (type); @@ -860,16 +854,16 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, break; case TYPE_CODE_FLAGS: - if (format) - print_scalar_formatted (valaddr, type, format, 0, stream); + if (options->format) + print_scalar_formatted (valaddr, type, options, 0, stream); else val_print_type_code_flags (type, valaddr, stream); break; case TYPE_CODE_FLT: - if (format) + if (options->format) return c_val_print (type, valaddr0, embedded_offset, address, stream, - format, deref_ref, recurse, pretty); + recurse, options); else ada_print_floating (valaddr0 + embedded_offset, type, stream); break; @@ -883,13 +877,13 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, } else { - print_record (type, valaddr, stream, format, recurse, pretty); + print_record (type, valaddr, stream, recurse, options); return 0; } case TYPE_CODE_ARRAY: - return ada_val_print_array (type, valaddr, address, stream, format, - deref_ref, recurse, pretty); + return ada_val_print_array (type, valaddr, address, stream, + recurse, options); case TYPE_CODE_REF: /* For references, the debugger is expected to print the value as @@ -910,8 +904,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, deref_val_int)); val_print (value_type (deref_val), value_contents (deref_val), 0, - VALUE_ADDRESS (deref_val), stream, format, - deref_ref, recurse + 1, pretty, current_language); + VALUE_ADDRESS (deref_val), stream, recurse + 1, + options, current_language); } else fputs_filtered ("(null)", stream); @@ -927,8 +921,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, static int print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr, - struct ui_file *stream, int format, int recurse, - enum val_prettyprint pretty, int comma_needed, + struct ui_file *stream, int recurse, + const struct value_print_options *options, int comma_needed, struct type *outer_type, const gdb_byte *outer_valaddr) { struct type *var_type = TYPE_FIELD_TYPE (type, field_num); @@ -941,13 +935,13 @@ print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr, (TYPE_FIELD_TYPE (var_type, which), valaddr + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT, - stream, format, recurse, pretty, + stream, recurse, options, comma_needed, outer_type, outer_valaddr); } int -ada_value_print (struct value *val0, struct ui_file *stream, int format, - enum val_prettyprint pretty) +ada_value_print (struct value *val0, struct ui_file *stream, + const struct value_print_options *options) { const gdb_byte *valaddr = value_contents (val0); CORE_ADDR address = VALUE_ADDRESS (val0) + value_offset (val0); @@ -955,6 +949,7 @@ ada_value_print (struct value *val0, struct ui_file *stream, int format, ada_to_fixed_type (value_type (val0), valaddr, address, NULL, 1); struct value *val = value_from_contents_and_address (type, valaddr, address); + struct value_print_options opts; /* If it is a pointer, indicate what it points to. */ if (TYPE_CODE (type) == TYPE_CODE_PTR) @@ -984,21 +979,23 @@ ada_value_print (struct value *val0, struct ui_file *stream, int format, return 0; } + opts = *options; + opts.deref_ref = 1; return (val_print (type, value_contents (val), 0, address, - stream, format, 1, 0, pretty, current_language)); + stream, 0, &opts, current_language)); } static void print_record (struct type *type, const gdb_byte *valaddr, - struct ui_file *stream, int format, int recurse, - enum val_prettyprint pretty) + struct ui_file *stream, int recurse, + const struct value_print_options *options) { type = ada_check_typedef (type); fprintf_filtered (stream, "("); - if (print_field_values (type, valaddr, stream, format, recurse, pretty, - 0, type, valaddr) != 0 && pretty) + if (print_field_values (type, valaddr, stream, recurse, options, + 0, type, valaddr) != 0 && options->pretty) { fprintf_filtered (stream, "\n"); print_spaces_filtered (2 * recurse, stream); @@ -1009,7 +1006,7 @@ print_record (struct type *type, const gdb_byte *valaddr, /* Print out fields of value at VALADDR having structure type TYPE. - TYPE, VALADDR, STREAM, FORMAT, RECURSE, and PRETTY have the + TYPE, VALADDR, STREAM, RECURSE, and OPTIONS have the same meanings as in ada_print_value and ada_val_print. OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record @@ -1023,8 +1020,9 @@ print_record (struct type *type, const gdb_byte *valaddr, static int print_field_values (struct type *type, const gdb_byte *valaddr, - struct ui_file *stream, int format, int recurse, - enum val_prettyprint pretty, int comma_needed, + struct ui_file *stream, int recurse, + const struct value_print_options *options, + int comma_needed, struct type *outer_type, const gdb_byte *outer_valaddr) { int i, len; @@ -1042,7 +1040,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, print_field_values (TYPE_FIELD_TYPE (type, i), valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT, - stream, format, recurse, pretty, + stream, recurse, options, comma_needed, type, valaddr); continue; } @@ -1050,7 +1048,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, { comma_needed = print_variant_part (type, i, valaddr, - stream, format, recurse, pretty, comma_needed, + stream, recurse, options, comma_needed, outer_type, outer_valaddr); continue; } @@ -1059,7 +1057,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, fprintf_filtered (stream, ", "); comma_needed = 1; - if (pretty) + if (options->pretty) { fprintf_filtered (stream, "\n"); print_spaces_filtered (2 + 2 * recurse, stream); @@ -1068,7 +1066,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, { wrap_here (n_spaces (2 + 2 * recurse)); } - if (inspect_it) + if (options->inspect_it) { if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR) fputs_filtered ("\"( ptr \"", stream); @@ -1107,6 +1105,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr, { int bit_pos = TYPE_FIELD_BITPOS (type, i); int bit_size = TYPE_FIELD_BITSIZE (type, i); + struct value_print_options opts; adjust_type_signedness (TYPE_FIELD_TYPE (type, i)); v = ada_value_primitive_packed_val (NULL, valaddr, @@ -1114,15 +1113,20 @@ print_field_values (struct type *type, const gdb_byte *valaddr, bit_pos % HOST_CHAR_BIT, bit_size, TYPE_FIELD_TYPE (type, i)); + opts = *options; + opts.deref_ref = 0; val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0, - stream, format, 0, recurse + 1, pretty, - current_language); + stream, recurse + 1, &opts, current_language); } } else - ada_val_print (TYPE_FIELD_TYPE (type, i), - valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT, - 0, 0, stream, format, 0, recurse + 1, pretty); + { + struct value_print_options opts = *options; + opts.deref_ref = 0; + ada_val_print (TYPE_FIELD_TYPE (type, i), + valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT, + 0, 0, stream, recurse + 1, &opts); + } annotate_field_end (); } |