diff options
author | Tom Tromey <tom@tromey.com> | 2021-02-05 07:17:11 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-02-05 07:17:12 -0700 |
commit | bdfea17ea9bbd9f92ad19a70d770af42473d9c07 (patch) | |
tree | cd14e3cb96c9123721ac6416a4b94d7682c65c93 /gdb | |
parent | 1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a (diff) | |
download | gdb-bdfea17ea9bbd9f92ad19a70d770af42473d9c07.zip gdb-bdfea17ea9bbd9f92ad19a70d770af42473d9c07.tar.gz gdb-bdfea17ea9bbd9f92ad19a70d770af42473d9c07.tar.bz2 |
Return unique_ptr from language_defn::get_compile_context
This changes language_defn::get_compile_context to return a
unique_ptr. This makes the ownership transfer clear.
gdb/ChangeLog
2021-02-05 Tom Tromey <tom@tromey.com>
* compile/compile-c-support.c (get_compile_context)
(c_get_compile_context, cplus_get_compile_context): Change return
type.
* language.c (language_defn::get_compile_instance): New method.
* language.h (language_defn::get_compile_instance): Change return
type. No longer inline.
* c-lang.c (c_language::get_compile_instance): Change return type.
(cplus_language::get_compile_instance): Change return type.
* c-lang.h (c_get_compile_context, cplus_get_compile_context):
Change return type.
* compile/compile.c (compile_to_object): Update.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/c-lang.c | 7 | ||||
-rw-r--r-- | gdb/c-lang.h | 18 | ||||
-rw-r--r-- | gdb/compile/compile-c-support.c | 8 | ||||
-rw-r--r-- | gdb/compile/compile.c | 4 | ||||
-rw-r--r-- | gdb/language.c | 9 | ||||
-rw-r--r-- | gdb/language.h | 20 |
7 files changed, 48 insertions, 32 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 553b5f0..c6ad0bb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,19 @@ 2021-02-05 Tom Tromey <tom@tromey.com> + * compile/compile-c-support.c (get_compile_context) + (c_get_compile_context, cplus_get_compile_context): Change return + type. + * language.c (language_defn::get_compile_instance): New method. + * language.h (language_defn::get_compile_instance): Change return + type. No longer inline. + * c-lang.c (c_language::get_compile_instance): Change return type. + (cplus_language::get_compile_instance): Change return type. + * c-lang.h (c_get_compile_context, cplus_get_compile_context): + Change return type. + * compile/compile.c (compile_to_object): Update. + +2021-02-05 Tom Tromey <tom@tromey.com> + * parser-defs.h (write_exp_symbol_reference): Declare. * parse.c (write_exp_symbol_reference): New function. * p-exp.y (variable): Use write_exp_symbol_reference. diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 626dbc4..16ff3c7 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -36,8 +36,7 @@ #include <ctype.h> #include "gdbcore.h" #include "gdbarch.h" - -class compile_instance; +#include "compile/compile-internal.h" /* Given a C string type, STR_TYPE, return the corresponding target character set name. */ @@ -888,7 +887,7 @@ public: } /* See language.h. */ - compile_instance *get_compile_instance () const override + std::unique_ptr<compile_instance> get_compile_instance () const override { return c_get_compile_context (); } @@ -1021,7 +1020,7 @@ public: } /* See language.h. */ - compile_instance *get_compile_instance () const override + std::unique_ptr<compile_instance> get_compile_instance () const override { return cplus_get_compile_context (); } diff --git a/gdb/c-lang.h b/gdb/c-lang.h index 5dfd731..a488c04 100644 --- a/gdb/c-lang.h +++ b/gdb/c-lang.h @@ -147,21 +147,19 @@ extern bool c_is_string_type_p (struct type *type); extern int c_textual_element_type (struct type *, char); -/* Create a new instance of the C compiler and return it. The new - 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 +/* Create a new instance of the C compiler and return it. This + function never returns NULL, but rather throws an exception on + failure. This is suitable for use as the language_defn::get_compile_instance method. */ -extern compile_instance *c_get_compile_context (void); +extern std::unique_ptr<compile_instance> c_get_compile_context (); -/* Create a new instance of the C++ compiler and return it. The new - 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 +/* Create a new instance of the C++ compiler and return it. This + function never returns NULL, but rather throws an exception on + failure. This is suitable for use as the language_defn::get_compile_instance method. */ -extern compile_instance *cplus_get_compile_context (); +extern std::unique_ptr<compile_instance> cplus_get_compile_context (); /* This takes the user-supplied text and returns a new bit of code to compile. diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c index 5f49a0a..65f1867 100644 --- a/gdb/compile/compile-c-support.c +++ b/gdb/compile/compile-c-support.c @@ -99,7 +99,7 @@ load_libcompile (const char *fe_libcc, const char *fe_context) template <typename INSTTYPE, typename FUNCTYPE, typename CTXTYPE, typename BASE_VERSION_TYPE, typename API_VERSION_TYPE> -compile_instance * +std::unique_ptr<compile_instance> get_compile_context (const char *fe_libcc, const char *fe_context, BASE_VERSION_TYPE base_version, API_VERSION_TYPE api_version) @@ -118,12 +118,12 @@ get_compile_context (const char *fe_libcc, const char *fe_context, error (_("The loaded version of GCC does not support the required version " "of the API.")); - return new INSTTYPE (context); + return std::unique_ptr<compile_instance> (new INSTTYPE (context)); } /* A C-language implementation of get_compile_context. */ -compile_instance * +std::unique_ptr<compile_instance> c_get_compile_context () { return get_compile_context @@ -135,7 +135,7 @@ c_get_compile_context () /* A C++-language implementation of get_compile_context. */ -compile_instance * +std::unique_ptr<compile_instance> cplus_get_compile_context () { return get_compile_context diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c index 4e72adc..d9c99bf 100644 --- a/gdb/compile/compile.c +++ b/gdb/compile/compile.c @@ -649,8 +649,8 @@ 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. */ - std::unique_ptr <compile_instance> compiler - (current_language->get_compile_instance ()); + std::unique_ptr<compile_instance> compiler + = current_language->get_compile_instance (); if (compiler == nullptr) error (_("No compiler support for language %s."), current_language->name ()); diff --git a/gdb/language.c b/gdb/language.c index 8dde504..c23f291 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -46,6 +46,7 @@ #include "c-lang.h" #include <algorithm> #include "gdbarch.h" +#include "compile/compile-internal.h" static void set_range_case (void); @@ -704,6 +705,14 @@ language_defn::is_string_type_p (struct type *type) const return c_is_string_type_p (type); } +/* See language.h. */ + +std::unique_ptr<compile_instance> +language_defn::get_compile_instance () const +{ + return {}; +} + /* The default implementation of the get_symbol_name_matcher_inner method from the language_defn class. Matches with strncmp_iw. */ diff --git a/gdb/language.h b/gdb/language.h index 44dbf3b..4df09d8 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -374,18 +374,14 @@ struct language_defn symbol_name_matcher_ftype *get_symbol_name_matcher (const lookup_name_info &lookup_name) const; - /* 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; - } + /* 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. If compilation is not supported for this language + then this method returns NULL. */ + + virtual std::unique_ptr<compile_instance> get_compile_instance () const; /* This method must be overridden if 'get_compile_instance' is overridden. |