gdb: Convert language la_get_compile_instance field to a method

This commit changes the language_data::la_get_compile_instance
function pointer member variable into a member function of
language_defn.  Unlike previous commits converting fields of
language_data to member function in language_defn, this field is NULL
for some languages.  As a result I had to change the API slightly so
that the base language_defn class provides an implementation.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* ada-lang.c (ada_language_data): Delete la_get_compile_instance
	initializer.
	* c-lang.c (class compile_instance): Declare.
	(c_language_data): Delete la_get_compile_instance initializer.
	(c_language::get_compile_instance): New member function.
	(cplus_language_data): Delete la_get_compile_instance initializer.
	(cplus_language::get_compile_instance): New member function.
	(asm_language_data): Delete la_get_compile_instance initializer.
	(minimal_language_data): Likewise.
	* c-lang.h (c_get_compile_context): Update comment.
	(cplus_get_compile_context): Update comment.
	* compile/compile.c (compile_to_object): Update calls, don't rely
	on function pointer being NULL.
	* d-lang.c (d_language_data): Delete la_get_compile_instance
	initializer.
	* f-lang.c (f_language_data): Likewise.
	* go-lang.c (go_language_data): Likewise.
	* language.c (unknown_language_data): Likewise.
	(auto_language_data): Likewise.
	* language.h (language_data): Delete la_get_compile_instance field.
	(language_defn::get_compile_instance): New member function.
	* m2-lang.c (m2_language_data): Delete la_get_compile_instance
	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.
This commit is contained in:
Andrew Burgess 2020-05-02 09:12:30 +01:00
parent 4009ee92c4
commit 8e25bafe93
15 changed files with 62 additions and 32 deletions

View file

@ -1,3 +1,33 @@
2020-06-02 Andrew Burgess <andrew.burgess@embecosm.com>
* ada-lang.c (ada_language_data): Delete la_get_compile_instance
initializer.
* c-lang.c (class compile_instance): Declare.
(c_language_data): Delete la_get_compile_instance initializer.
(c_language::get_compile_instance): New member function.
(cplus_language_data): Delete la_get_compile_instance initializer.
(cplus_language::get_compile_instance): New member function.
(asm_language_data): Delete la_get_compile_instance initializer.
(minimal_language_data): Likewise.
* c-lang.h (c_get_compile_context): Update comment.
(cplus_get_compile_context): Update comment.
* compile/compile.c (compile_to_object): Update calls, don't rely
on function pointer being NULL.
* d-lang.c (d_language_data): Delete la_get_compile_instance
initializer.
* f-lang.c (f_language_data): Likewise.
* go-lang.c (go_language_data): Likewise.
* language.c (unknown_language_data): Likewise.
(auto_language_data): Likewise.
* language.h (language_data): Delete la_get_compile_instance field.
(language_defn::get_compile_instance): New member function.
* m2-lang.c (m2_language_data): Delete la_get_compile_instance
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 <andrew.burgess@embecosm.com>
* ada-lang.c (ada_add_all_symbols): Update comment.

View file

@ -13980,7 +13980,6 @@ extern const struct language_data ada_language_data =
default_search_name_hash,
&ada_varobj_ops,
NULL,
NULL,
ada_is_string_type,
"(...)" /* la_struct_too_deep_ellipsis */
};

View file

@ -37,6 +37,8 @@
#include "gdbcore.h"
#include "gdbarch.h"
class compile_instance;
/* Given a C string type, STR_TYPE, return the corresponding target
character set name. */
@ -924,7 +926,6 @@ extern const struct language_data c_language_data =
NULL, /* la_get_symbol_name_matcher */
default_search_name_hash,
&c_varobj_ops,
c_get_compile_context,
c_compute_program,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
@ -945,6 +946,12 @@ public:
{
c_language_arch_info (gdbarch, lai);
}
/* See language.h. */
compile_instance *get_compile_instance () const override
{
return c_get_compile_context ();
}
};
/* Single instance of the C language class. */
@ -1023,7 +1030,6 @@ extern const struct language_data cplus_language_data =
cp_get_symbol_name_matcher,
cp_search_name_hash,
&cplus_varobj_ops,
cplus_get_compile_context,
cplus_compute_program,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
@ -1114,6 +1120,12 @@ public:
{
return cp_lookup_transparent_type (name);
}
/* See language.h. */
compile_instance *get_compile_instance () const override
{
return cplus_get_compile_context ();
}
};
/* The single instance of the C++ language class. */
@ -1165,7 +1177,6 @@ extern const struct language_data asm_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
@ -1235,7 +1246,6 @@ extern const struct language_data minimal_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -157,7 +157,7 @@ extern int c_textual_element_type (struct type *, char);
compiler is owned by the caller and must be freed using the destroy
method. This function never returns NULL, but rather throws an
exception on failure. This is suitable for use as the
la_get_compile_instance language method. */
language_defn::get_compile_instance method. */
extern compile_instance *c_get_compile_context (void);
@ -165,7 +165,7 @@ extern compile_instance *c_get_compile_context (void);
compiler is owned by the caller and must be freed using the destroy
method. This function never returns NULL, but rather throws an
exception on failure. This is suitable for use as the
la_get_compile_instance language method. */
language_defn::get_compile_instance method. */
extern compile_instance *cplus_get_compile_context ();

View file

@ -691,13 +691,11 @@ compile_to_object (struct command_line *cmd, const char *cmd_string,
expr_pc = get_frame_address_in_block (get_selected_frame (NULL));
/* Set up instance and context for the compiler. */
if (current_language->la_get_compile_instance == NULL)
std::unique_ptr <compile_instance> compiler
(current_language->get_compile_instance ());
if (compiler == nullptr)
error (_("No compiler support for language %s."),
current_language->la_name);
compile_instance *compiler_instance
= current_language->la_get_compile_instance ();
std::unique_ptr<compile_instance> compiler (compiler_instance);
compiler->set_print_callback (print_callback, NULL);
compiler->set_scope (scope);
compiler->set_block (expr_block);

View file

@ -179,7 +179,6 @@ extern const struct language_data d_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -636,7 +636,6 @@ extern const struct language_data f_language_data =
cp_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
f_is_string_type_p,
"(...)" /* la_struct_too_deep_ellipsis */
};

View file

@ -564,7 +564,6 @@ extern const struct language_data go_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
go_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -841,7 +841,6 @@ extern const struct language_data unknown_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};
@ -907,7 +906,6 @@ extern const struct language_data auto_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
default_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -392,16 +392,6 @@ struct language_data
/* Various operations on varobj. */
const struct lang_varobj_ops *la_varobj_ops;
/* If this language allows compilation from the gdb command line,
this method should be non-NULL. When called it should return
an instance of struct gcc_context appropriate to the language.
When defined this method must never return NULL; instead it
should throw an exception on failure. The returned compiler
instance is owned by its caller and must be deallocated by
calling its 'destroy' method. */
compile_instance *(*la_get_compile_instance) (void);
/* This method must be defined if 'la_get_gcc_context' is defined.
If 'la_get_gcc_context' is not defined, then this method is
ignored.
@ -511,6 +501,19 @@ struct language_defn : language_data
return ::iterate_over_symbols (block, name, domain, callback);
}
/* If this language allows compilation from the gdb command line, then
this method will return an instance of struct gcc_context appropriate
to the language. If compilation for this language is generally
supported, but something goes wrong then an exception is thrown. The
returned compiler instance is owned by its caller and must be
deallocated by the caller. If compilation is not supported for this
language then this method returns NULL. */
virtual compile_instance *get_compile_instance () const
{
return nullptr;
}
/* List of all known languages. */
static const struct language_defn *languages[nr_languages];
};

View file

@ -389,7 +389,6 @@ extern const struct language_data m2_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
m2_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -404,7 +404,6 @@ extern const struct language_data objc_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -1064,7 +1064,6 @@ extern const struct language_data opencl_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
c_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -419,7 +419,6 @@ extern const struct language_data pascal_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
pascal_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};

View file

@ -2096,7 +2096,6 @@ extern const struct language_data rust_language_data =
default_search_name_hash,
&default_varobj_ops,
NULL,
NULL,
rust_is_string_type_p,
"{...}" /* la_struct_too_deep_ellipsis */
};