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:
parent
4009ee92c4
commit
8e25bafe93
15 changed files with 62 additions and 32 deletions
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
18
gdb/c-lang.c
18
gdb/c-lang.c
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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];
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue