gdb: Convert language la_get_compile_instance field to a method
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sat, 2 May 2020 08:12:30 +0000 (09:12 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 2 Jun 2020 12:53:10 +0000 (13:53 +0100)
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.

15 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.c
gdb/c-lang.h
gdb/compile/compile.c
gdb/d-lang.c
gdb/f-lang.c
gdb/go-lang.c
gdb/language.c
gdb/language.h
gdb/m2-lang.c
gdb/objc-lang.c
gdb/opencl-lang.c
gdb/p-lang.c
gdb/rust-lang.c

index 34c55810852d725b5f76ced39b0791f51ecf7f77..a05b6b14a31d4068001a8139966b08ab4ad86952 100644 (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.
index 762c124a654dae0339a179e729ea6e815e7970be..f0f5ee593a692457e5be154e37bc89b23e8754fc 100644 (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 */
 };
index bfd45f433c6303fdc470fb11060a7c7929538fe9..eb9ebdb9f54c00b6d17db57683b67b532d1766be 100644 (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 */
 };
index 642157125a848d3d093e4d30f40de28dc84396a5..3e07dc9c88d11569a489a8913ad3457adc183d5d 100644 (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 ();
 
index 8d134d9cf18e8d9c2f64e3110a3f1b4e8890490e..3a3afa85736c7d676912ee49aa5047f11add9d0c 100644 (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);
index 5732778021499799f41d9696cc69a84c89aadebc..08b884de733e9d4a6d538ae0079327fdbf543597 100644 (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 */
 };
index ae559dee812bfab81c01fe2a0c62f7751bfb846c..9e647f5374e786ad01e7fe30c7f8ed30d706b129 100644 (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 */
 };
index c596279012d477c8af0af457c56a7eef77910d42..8f9ea6330d5710019b65ee02965bb38a7cd2e16b 100644 (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 */
 };
index 33e8b16b11ab4008bb14849b3d00f0d734dd4d1a..941e0df5e95d04d08882d3829c5aaf6e9befe7e4 100644 (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 */
 };
index 0880ced3bcde8fa0399baca52155fe501c424d7b..57f0adb3d608a32bc948c71e79843774e757cb69 100644 (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];
 };
index c83f9ef4c1efb15229a32b47e94f87f008c553a0..21cafb9ba6b9c73cec44a1dbc7868f4048837271 100644 (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 */
 };
index 6cf8bbbe091b96f9c9ba8c948a7defb7cfdc5115..4a84f84cb88efabaf34cd45a516439e8731cf0a6 100644 (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 */
 };
index a548fe60a746449cdca8f8559af421dfc434d50f..bfb462c17c8cf604ce4c4a36072b588d7d4b177b 100644 (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 */
 };
index 7956d879997e38120cee8f55c5e66892828baee3..f040f9a14c48129fe3427964a81687992c26c6f6 100644 (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 */
 };
index 966aa14a69e0a8ff9f6c3dee51022d87844fb01d..fbc454cc3374129862f34f778918a4c3633cb490 100644 (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 */
 };