aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-02-05 07:17:11 -0700
committerTom Tromey <tom@tromey.com>2021-02-05 07:17:12 -0700
commitbdfea17ea9bbd9f92ad19a70d770af42473d9c07 (patch)
treecd14e3cb96c9123721ac6416a4b94d7682c65c93
parent1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a (diff)
downloadfsf-binutils-gdb-bdfea17ea9bbd9f92ad19a70d770af42473d9c07.zip
fsf-binutils-gdb-bdfea17ea9bbd9f92ad19a70d770af42473d9c07.tar.gz
fsf-binutils-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.
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/c-lang.c7
-rw-r--r--gdb/c-lang.h18
-rw-r--r--gdb/compile/compile-c-support.c8
-rw-r--r--gdb/compile/compile.c4
-rw-r--r--gdb/language.c9
-rw-r--r--gdb/language.h20
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.