From: Andrew Burgess Date: Fri, 1 May 2020 20:20:06 +0000 (+0100) Subject: gdb: Convert language la_pass_by_reference field to a method X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=48448202d7e607d7423c6186438099f442732a95;p=binutils-gdb.git gdb: Convert language la_pass_by_reference field to a method This commit changes the language_data::la_pass_by_reference function pointer member variable into a member function of language_defn. The interesting thing in this commit is that I have removed the default_pass_by_reference function entirely. This function only ever returned a language_pass_by_ref_info struct in its default state, so all uses of this function can be replaced by just default initialisation of a language_pass_by_ref_info variable. There should be no user visible changes after this commit. gdb/ChangeLog: * ada-lang.c (ada_language_data): Delete la_pass_by_reference initializer. * c-lang.c (c_language_data): Likewise. (cplus_language_data): Likewise. (cplus_language::pass_by_reference_info): New method. (asm_language_data): Delete la_pass_by_reference initializer. (minimal_language_data): Likewise. * cp-abi.c (cp_pass_by_reference): Remove use of default_pass_by_reference. * d-lang.c (d_language_data): Likewise. * f-lang.c (f_language_data): Likewise. * gnu-v3-abi.c (gnuv3_pass_by_reference): Remove use of default_pass_by_reference. * go-lang.c (go_language_data): Likewise. * language.c (language_pass_by_reference): Update. (default_pass_by_reference): Delete. (unknown_language_data): Delete la_pass_by_reference initializer. (auto_language_data): Likewise. * language.h (struct language_data): Delete la_pass_by_reference field. (language_defn::pass_by_reference_info): New member function. (default_pass_by_reference): Delete declaration. * m2-lang.c (m2_language_data): Delete la_pass_by_reference initializer. * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3c2f394d071..1dcd649879f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,35 @@ +2020-06-02 Andrew Burgess + + * ada-lang.c (ada_language_data): Delete la_pass_by_reference + initializer. + * c-lang.c (c_language_data): Likewise. + (cplus_language_data): Likewise. + (cplus_language::pass_by_reference_info): New method. + (asm_language_data): Delete la_pass_by_reference initializer. + (minimal_language_data): Likewise. + * cp-abi.c (cp_pass_by_reference): Remove use of + default_pass_by_reference. + * d-lang.c (d_language_data): Likewise. + * f-lang.c (f_language_data): Likewise. + * gnu-v3-abi.c (gnuv3_pass_by_reference): Remove use of + default_pass_by_reference. + * go-lang.c (go_language_data): Likewise. + * language.c (language_pass_by_reference): Update. + (default_pass_by_reference): Delete. + (unknown_language_data): Delete la_pass_by_reference + initializer. + (auto_language_data): Likewise. + * language.h (struct language_data): Delete la_pass_by_reference + field. + (language_defn::pass_by_reference_info): New member function. + (default_pass_by_reference): Delete declaration. + * m2-lang.c (m2_language_data): Delete la_pass_by_reference + initializer. + * 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. + 2020-06-02 Andrew Burgess * ada-lang.c (ada_read_var_value): Delete function, move diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index d69d2bb735d..654447984e5 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -14066,7 +14066,6 @@ extern const struct language_data ada_language_data = ada_get_gdb_completer_word_break_characters, ada_collect_symbol_completion_matches, ada_language_arch_info, - default_pass_by_reference, ada_watch_location_expression, ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ ada_iterate_over_symbols, diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 8663dc1dfa3..9efcf56d704 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -922,7 +922,6 @@ extern const struct language_data c_language_data = default_word_break_characters, default_collect_symbol_completion_matches, c_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, @@ -1081,7 +1080,6 @@ extern const struct language_data cplus_language_data = default_word_break_characters, default_collect_symbol_completion_matches, cplus_language_arch_info, - cp_pass_by_reference, c_watch_location_expression, cp_get_symbol_name_matcher, iterate_over_symbols, @@ -1101,6 +1099,14 @@ public: cplus_language () : language_defn (language_cplus, cplus_language_data) { /* Nothing. */ } + + /* See language.h. */ + + struct language_pass_by_ref_info pass_by_reference_info + (struct type *type) const override + { + return cp_pass_by_reference (type); + } }; /* The single instance of the C++ language class. */ @@ -1149,7 +1155,6 @@ extern const struct language_data asm_language_data = default_word_break_characters, default_collect_symbol_completion_matches, c_language_arch_info, /* FIXME: la_language_arch_info. */ - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, @@ -1214,7 +1219,6 @@ extern const struct language_data minimal_language_data = default_word_break_characters, default_collect_symbol_completion_matches, c_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c index 3e2edad45ca..cd6bf821557 100644 --- a/gdb/cp-abi.c +++ b/gdb/cp-abi.c @@ -226,7 +226,7 @@ struct language_pass_by_ref_info cp_pass_by_reference (struct type *type) { if ((current_cp_abi.pass_by_reference) == NULL) - return default_pass_by_reference (type); + return {}; return (*current_cp_abi.pass_by_reference) (type); } diff --git a/gdb/d-lang.c b/gdb/d-lang.c index e55d82e08be..28864420bad 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -243,7 +243,6 @@ extern const struct language_data d_language_data = default_word_break_characters, default_collect_symbol_completion_matches, d_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 53e44db5caf..78959b1ec57 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -671,7 +671,6 @@ extern const struct language_data f_language_data = f_word_break_characters, f_collect_symbol_completion_matches, f_language_arch_info, - default_pass_by_reference, c_watch_location_expression, cp_get_symbol_name_matcher, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index 6faaca2e041..255cfd14ea7 100644 --- a/gdb/gnu-v3-abi.c +++ b/gdb/gnu-v3-abi.c @@ -1406,8 +1406,7 @@ gnuv3_pass_by_reference (struct type *type) type = check_typedef (type); /* Start with the default values. */ - struct language_pass_by_ref_info info - = default_pass_by_reference (type); + struct language_pass_by_ref_info info; bool has_cc_attr = false; bool is_pass_by_value = false; diff --git a/gdb/go-lang.c b/gdb/go-lang.c index caac9bdc646..2d17ea0c405 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -614,7 +614,6 @@ extern const struct language_data go_language_data = default_word_break_characters, default_collect_symbol_completion_matches, go_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/language.c b/gdb/language.c index d541c6f2dd8..da99806413b 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -627,17 +627,7 @@ language_class_name_from_physname (const struct language_defn *lang, struct language_pass_by_ref_info language_pass_by_reference (struct type *type) { - return current_language->la_pass_by_reference (type); -} - -/* Return a default struct that provides pass-by-reference information - about the given TYPE. Languages should update the default values - as appropriate. */ - -struct language_pass_by_ref_info -default_pass_by_reference (struct type *type) -{ - return {}; + return current_language->pass_by_reference_info (type); } /* Return the default string containing the list of characters @@ -848,7 +838,6 @@ extern const struct language_data unknown_language_data = default_word_break_characters, default_collect_symbol_completion_matches, unknown_language_arch_info, /* la_language_arch_info. */ - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, @@ -911,7 +900,6 @@ extern const struct language_data auto_language_data = default_word_break_characters, default_collect_symbol_completion_matches, unknown_language_arch_info, /* la_language_arch_info. */ - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/language.h b/gdb/language.h index 56260fb6ee9..cc0d0ffab83 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -372,11 +372,6 @@ struct language_data void (*la_language_arch_info) (struct gdbarch *, struct language_arch_info *); - /* Return information about whether TYPE should be passed - (and returned) by reference at the language level. */ - struct language_pass_by_ref_info (*la_pass_by_reference) - (struct type *type); - /* Return an expression that can be used for a location watchpoint. TYPE is a pointer type that points to the memory to watch, and ADDR is the address of the watched memory. */ @@ -497,6 +492,17 @@ struct language_defn : language_data const struct block *var_block, struct frame_info *frame) const; + /* Return information about whether TYPE should be passed + (and returned) by reference at the language level. The default + implementation returns a LANGUAGE_PASS_BY_REF_INFO initialised in its + default state. */ + + virtual struct language_pass_by_ref_info pass_by_reference_info + (struct type *type) const + { + return {}; + } + /* List of all known languages. */ static const struct language_defn *languages[nr_languages]; }; @@ -669,11 +675,6 @@ extern const char *default_word_break_characters (void); (and returned) by reference at the language level. */ struct language_pass_by_ref_info language_pass_by_reference (struct type *type); -/* Return a default struct that provides pass-by-reference information - about the given TYPE. Languages should update the default values - as appropriate. */ -struct language_pass_by_ref_info default_pass_by_reference (struct type *type); - /* The default implementation of la_print_typedef. */ void default_print_typedef (struct type *type, struct symbol *new_symbol, struct ui_file *stream); diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 1769c820228..ddc63a79522 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -412,7 +412,6 @@ extern const struct language_data m2_language_data = default_word_break_characters, default_collect_symbol_completion_matches, m2_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index f6fd8f5e465..cf5b91b3388 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -401,7 +401,6 @@ extern const struct language_data objc_language_data = default_word_break_characters, default_collect_symbol_completion_matches, c_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index c1c498c7377..d7476f7d285 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1078,7 +1078,6 @@ extern const struct language_data opencl_language_data = default_word_break_characters, default_collect_symbol_completion_matches, opencl_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols, diff --git a/gdb/p-lang.c b/gdb/p-lang.c index e55f0b07696..4a668b17278 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -465,7 +465,6 @@ extern const struct language_data pascal_language_data = default_word_break_characters, default_collect_symbol_completion_matches, pascal_language_arch_info, - default_pass_by_reference, c_watch_location_expression, NULL, /* la_compare_symbol_for_completion */ iterate_over_symbols, diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 3522ce52f4b..3fdf5667361 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -2138,7 +2138,6 @@ extern const struct language_data rust_language_data = default_word_break_characters, default_collect_symbol_completion_matches, rust_language_arch_info, - default_pass_by_reference, rust_watch_location_expression, NULL, /* la_get_symbol_name_matcher */ iterate_over_symbols,