From 22e3f3ed5c417fca6a39173a671dba707d2d6eaf Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 23 Jun 2020 14:16:32 +0100 Subject: [PATCH] gdb: Convert la_struct_too_deep_ellipsis to a method Convert language_data::la_struct_too_deep_ellipsis member variable to a method in language_defn. There should be no user visible changes after this commit. gdb/ChangeLog: * ada-lang.c (ada_language_data): Remove la_struct_too_deep_ellipsis initializer. (ada_language::struct_too_deep_ellipsis): New member function. * c-lang.c (c_language_data): Remove la_struct_too_deep_ellipsis initializer. (cplus_language_data): Likewise. (asm_language_data): Likewise. (minimal_language_data): Likewise. * cp-valprint.c (cp_print_value): Update call to struct_too_deep_ellipsis. * d-lang.c (d_language_data): Remove la_struct_too_deep_ellipsis initializer. * f-lang.c (f_language_data): Likewise. (f_language::struct_too_deep_ellipsis): New member function. * go-lang.c (go_language_data): Remove la_struct_too_deep_ellipsis initializer. * language.c (unknown_language_data): Likewise. (auto_language_data): Likewise. * language.h (language_data): Delete la_struct_too_deep_ellipsis member variable. (language_defn::struct_too_deep_ellipsis): New member function. * m2-lang.c (m2_language_data): Remove la_struct_too_deep_ellipsis initializer.Q * objc-lang.c (objc_language_data): Likewise. * opencl-lang.c (opencl_language_data): Likewise. * p-lang.c (pascal_language_data): Likewise. * rust-lang.c (rust_language_data): Likewise. * valprint.c (val_print_check_max_depth): Update call to struct_too_deep_ellipsis. --- gdb/ChangeLog | 32 ++++++++++++++++++++++++++++++++ gdb/ada-lang.c | 5 ++++- gdb/c-lang.c | 4 ---- gdb/cp-valprint.c | 4 ++-- gdb/d-lang.c | 1 - gdb/f-lang.c | 6 +++++- gdb/go-lang.c | 1 - gdb/language.c | 2 -- gdb/language.h | 16 ++++++++++------ gdb/m2-lang.c | 1 - gdb/objc-lang.c | 1 - gdb/opencl-lang.c | 1 - gdb/p-lang.c | 1 - gdb/rust-lang.c | 1 - gdb/valprint.c | 4 ++-- 15 files changed, 55 insertions(+), 25 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 46dcc68d3ad..ef97ac180de 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,35 @@ +2020-09-16 Andrew Burgess + + * ada-lang.c (ada_language_data): Remove + la_struct_too_deep_ellipsis initializer. + (ada_language::struct_too_deep_ellipsis): New member function. + * c-lang.c (c_language_data): Remove la_struct_too_deep_ellipsis + initializer. + (cplus_language_data): Likewise. + (asm_language_data): Likewise. + (minimal_language_data): Likewise. + * cp-valprint.c (cp_print_value): Update call to + struct_too_deep_ellipsis. + * d-lang.c (d_language_data): Remove la_struct_too_deep_ellipsis + initializer. + * f-lang.c (f_language_data): Likewise. + (f_language::struct_too_deep_ellipsis): New member function. + * go-lang.c (go_language_data): Remove la_struct_too_deep_ellipsis + initializer. + * language.c (unknown_language_data): Likewise. + (auto_language_data): Likewise. + * language.h (language_data): Delete la_struct_too_deep_ellipsis + member variable. + (language_defn::struct_too_deep_ellipsis): New member function. + * m2-lang.c (m2_language_data): Remove la_struct_too_deep_ellipsis + initializer.Q + * objc-lang.c (objc_language_data): Likewise. + * opencl-lang.c (opencl_language_data): Likewise. + * p-lang.c (pascal_language_data): Likewise. + * rust-lang.c (rust_language_data): Likewise. + * valprint.c (val_print_check_max_depth): Update call to + struct_too_deep_ellipsis. + 2020-09-16 Felix Willgerodt * MAINTAINERS (Write After Approval): Add myself. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 5f0e68ea892..3ad693fe25e 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -13729,7 +13729,6 @@ extern const struct language_data ada_language_data = 0, /* c-style arrays */ 1, /* String lower bound */ &ada_varobj_ops, - "(...)" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Ada language. */ @@ -14187,6 +14186,10 @@ public: return ada_is_string_type (type); } + /* See language.h. */ + + const char *struct_too_deep_ellipsis () const override + { return "(...)"; } protected: /* See language.h. */ diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 03628704349..8a704701c91 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -895,7 +895,6 @@ extern const struct language_data c_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &c_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the C language. */ @@ -996,7 +995,6 @@ extern const struct language_data cplus_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &cplus_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* A class for the C++ language. */ @@ -1194,7 +1192,6 @@ extern const struct language_data asm_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* A class for the ASM language. */ @@ -1250,7 +1247,6 @@ extern const struct language_data minimal_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* A class for the minimal language. */ diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index a02fee6b552..819736dac9e 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -499,8 +499,8 @@ cp_print_value (struct value *val, struct ui_file *stream, && recurse >= options->max_depth) { const struct language_defn *language = current_language; - gdb_assert (language->la_struct_too_deep_ellipsis != NULL); - fputs_filtered (language->la_struct_too_deep_ellipsis, stream); + gdb_assert (language->struct_too_deep_ellipsis () != NULL); + fputs_filtered (language->struct_too_deep_ellipsis (), stream); } else { diff --git a/gdb/d-lang.c b/gdb/d-lang.c index abef3b6fa43..79cb1e478c4 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -148,7 +148,6 @@ extern const struct language_data d_language_data = 1, /* C-style arrays. */ 0, /* String lower bound. */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the D language. */ diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 49f7b0368e2..5beaf3d772c 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -508,7 +508,6 @@ extern const struct language_data f_language_data = 0, /* arrays are first-class (not c-style) */ 1, /* String lower bound */ &default_varobj_ops, - "(...)" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Fortran language. */ @@ -707,6 +706,11 @@ public: && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR)); } + /* See language.h. */ + + const char *struct_too_deep_ellipsis () const override + { return "(...)"; } + protected: /* See language.h. */ diff --git a/gdb/go-lang.c b/gdb/go-lang.c index cb42ef1b7cf..deff33a8abf 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -523,7 +523,6 @@ extern const struct language_data go_language_data = 1, /* C-style arrays. */ 0, /* String lower bound. */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Go language. */ diff --git a/gdb/language.c b/gdb/language.c index c993cfc57a6..914c75b08e7 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -798,7 +798,6 @@ extern const struct language_data unknown_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the unknown language. */ @@ -924,7 +923,6 @@ extern const struct language_data auto_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the fake "auto" language. */ diff --git a/gdb/language.h b/gdb/language.h index d2e5b733077..f2195ed4e8d 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -266,12 +266,6 @@ struct language_data /* Various operations on varobj. */ const struct lang_varobj_ops *la_varobj_ops; - - /* This string is used by the 'set print max-depth' setting. When GDB - replaces a struct or union (during value printing) that is "too - deep" this string is displayed instead. */ - const char *la_struct_too_deep_ellipsis; - }; /* Base class from which all other language classes derive. */ @@ -553,6 +547,16 @@ struct language_defn : language_data /* Return true if TYPE is a string type. */ virtual bool is_string_type_p (struct type *type) const; + /* Return a string that is used by the 'set print max-depth' setting. + When GDB replaces a struct or union (during value printing) that is + "too deep" this string is displayed instead. The default value here + suits most languages. If overriding then the string here should + ideally be similar in style to the default; an opener, three '.', and + a closer. */ + + virtual const char *struct_too_deep_ellipsis () const + { return "{...}"; } + protected: /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method. diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 2c39359d289..9e2d0d75f17 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -214,7 +214,6 @@ extern const struct language_data m2_language_data = 0, /* arrays are first-class (not c-style) */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the M2 language. */ diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 4e1d2cdcf2d..2c49f8d5840 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -343,7 +343,6 @@ extern const struct language_data objc_language_data = 1, /* C-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Objective-C language. */ diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 2d5ae17c36d..0df58ee5e18 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1021,7 +1021,6 @@ extern const struct language_data opencl_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the OpenCL language. */ diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 18490843a99..cbde8e1aecc 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -272,7 +272,6 @@ extern const struct language_data pascal_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Pascal language. */ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index fa02b18e6fa..ff0ac7bd42c 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -1921,7 +1921,6 @@ extern const struct language_data rust_language_data = 1, /* c-style arrays */ 0, /* String lower bound */ &default_varobj_ops, - "{...}" /* la_struct_too_deep_ellipsis */ }; /* Class representing the Rust language. */ diff --git a/gdb/valprint.c b/gdb/valprint.c index adfbcc0464b..0749f38983e 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -1025,8 +1025,8 @@ val_print_check_max_depth (struct ui_file *stream, int recurse, { if (options->max_depth > -1 && recurse >= options->max_depth) { - gdb_assert (language->la_struct_too_deep_ellipsis != NULL); - fputs_filtered (language->la_struct_too_deep_ellipsis, stream); + gdb_assert (language->struct_too_deep_ellipsis () != NULL); + fputs_filtered (language->struct_too_deep_ellipsis (), stream); return true; } -- 2.30.2