From: Tom Tromey Date: Fri, 13 Mar 2020 23:39:52 +0000 (-0600) Subject: Convert D printing to value-based API X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d133c3e1a877259bbee460897d9a6a2820ffe451;p=binutils-gdb.git Convert D printing to value-based API As with Rust and Go, it was straightforward to convert D to the value-based API directly. gdb/ChangeLog 2020-03-13 Tom Tromey * d-valprint.c (dynamic_array_type): Call d_value_print_inner. (d_value_print_inner): New function. * d-lang.h (d_value_print_inner): Declare. * d-lang.c (d_language_defn): Use d_value_print_inner. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 862d4bc7e93..892ad87838d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2020-03-13 Tom Tromey + + * d-valprint.c (dynamic_array_type): Call d_value_print_inner. + (d_value_print_inner): New function. + * d-lang.h (d_value_print_inner): Declare. + * d-lang.c (d_language_defn): Use d_value_print_inner. + 2020-03-13 Tom Tromey * go-valprint.c (go_value_print_inner): New function. diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 71dc4c6feb2..4dbcf53bba7 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -225,7 +225,7 @@ extern const struct language_defn d_language_defn = c_print_typedef, /* Print a typedef using appropriate syntax. */ d_val_print, /* Print a value using appropriate syntax. */ - nullptr, /* la_value_print_inner */ + d_value_print_inner, /* la_value_print_inner */ c_value_print, /* Print a top-level value. */ default_read_var_value, /* la_read_var_value */ NULL, /* Language specific skip_trampoline. */ diff --git a/gdb/d-lang.h b/gdb/d-lang.h index 88e1ea3e1ee..9b4e504024f 100644 --- a/gdb/d-lang.h +++ b/gdb/d-lang.h @@ -84,4 +84,10 @@ extern void d_val_print (struct type *type, struct value *val, const struct value_print_options *options); +/* Implement la_value_print_inner for D. */ + +extern void d_value_print_inner (struct value *val, + struct ui_file *stream, int recurse, + const struct value_print_options *options); + #endif /* !defined (D_LANG_H) */ diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c index b499121f3d8..e26c1ea8fa1 100644 --- a/gdb/d-valprint.c +++ b/gdb/d-valprint.c @@ -63,9 +63,7 @@ dynamic_array_type (struct type *type, ival = value_at (true_type, addr); true_type = value_type (ival); - d_val_print (true_type, - value_embedded_offset (ival), addr, - stream, recurse + 1, ival, options); + d_value_print_inner (ival, stream, recurse + 1, options); return 0; } return 1; @@ -94,3 +92,27 @@ d_val_print (struct type *type, int embedded_offset, recurse, val, options); } } + +/* See d-lang.h. */ + +void +d_value_print_inner (struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options) +{ + int ret; + + struct type *type = check_typedef (value_type (val)); + switch (TYPE_CODE (type)) + { + case TYPE_CODE_STRUCT: + ret = dynamic_array_type (type, value_embedded_offset (val), + value_address (val), + stream, recurse, val, options); + if (ret == 0) + break; + /* Fall through. */ + default: + c_value_print_inner (val, stream, recurse, options); + break; + } +}