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.
This commit is contained in:
Tom Tromey 2021-02-05 07:17:11 -07:00
parent 1b30f42106
commit bdfea17ea9
7 changed files with 47 additions and 31 deletions

View File

@ -1,3 +1,17 @@
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.

View File

@ -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 @@ class c_language : public language_defn
}
/* 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 @@ class cplus_language : public language_defn
}
/* 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 ();
}

View File

@ -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.

View File

@ -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

View File

@ -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 ());

View File

@ -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. */

View File

@ -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. */
/* 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 compile_instance *get_compile_instance () const
{
return nullptr;
}
virtual std::unique_ptr<compile_instance> get_compile_instance () const;
/* This method must be overridden if 'get_compile_instance' is
overridden.