gdb: Convert language la_printchar field to a method
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 3 Jun 2020 14:54:19 +0000 (15:54 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 23 Jun 2020 12:34:11 +0000 (13:34 +0100)
This commit changes the language_data::la_printchar function pointer
member variable into a member function of language_defn.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* ada-lang.c (ada_language_data): Delete la_printchar initializer.
(ada_language::printchar): New member function.
* c-lang.c (c_language_data): Delete la_printchar initializer.
(cplus_language_data): Likewise.
(asm_language_data): Likewise.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
* f-lang.c (f_printchar): Rename to f_language::printchar.
(f_language_data): Delete la_printchar initializer.
(f_language::printchar): New member function, implementation from
f_printchar.
* go-lang.c (go_language_data): Delete la_printchar initializer.
* language.c (unk_lang_printchar): Delete.
(language_defn::printchar): Define new member function.
(unknown_language_data): Delete la_printchar initializer.
(unknown_language::printchar): New member function.
(auto_language_data): Delete la_printchar initializer.
(auto_language::printchar): New member function.
* language.h (language_data): Delete la_printchar field.
(language_defn::printchar): Declare new member function.
(LA_PRINT_CHAR): Update call to printchar.
* m2-lang.c (m2_language_data): Delete la_printchar initializer.
(m2_language::printchar): New member function.
* objc-lang.c (objc_language_data): Delete la_printchar
initializer.
* opencl-lang.c (opencl_language_data): Likewise.
* p-lang.c (pascal_language_data): Delete la_printchar
initializer.
(pascal_language::printchar): New member function.
* rust-lang.c (rust_printchar): Rename to
rust_language::printchar.
(rust_language_data): Delete la_printchar initializer.
(rust_language::printchar): New member function, implementation
from rust_printchar.

13 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.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 d402fb590b6fa693334a53a6ac3b746092f275c5..8287719e931de8798a900fde151f365265da0b8d 100644 (file)
@@ -1,3 +1,40 @@
+2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * ada-lang.c (ada_language_data): Delete la_printchar initializer.
+       (ada_language::printchar): New member function.
+       * c-lang.c (c_language_data): Delete la_printchar initializer.
+       (cplus_language_data): Likewise.
+       (asm_language_data): Likewise.
+       (minimal_language_data): Likewise.
+       * d-lang.c (d_language_data): Likewise.
+       * f-lang.c (f_printchar): Rename to f_language::printchar.
+       (f_language_data): Delete la_printchar initializer.
+       (f_language::printchar): New member function, implementation from
+       f_printchar.
+       * go-lang.c (go_language_data): Delete la_printchar initializer.
+       * language.c (unk_lang_printchar): Delete.
+       (language_defn::printchar): Define new member function.
+       (unknown_language_data): Delete la_printchar initializer.
+       (unknown_language::printchar): New member function.
+       (auto_language_data): Delete la_printchar initializer.
+       (auto_language::printchar): New member function.
+       * language.h (language_data): Delete la_printchar field.
+       (language_defn::printchar): Declare new member function.
+       (LA_PRINT_CHAR): Update call to printchar.
+       * m2-lang.c (m2_language_data): Delete la_printchar initializer.
+       (m2_language::printchar): New member function.
+       * objc-lang.c (objc_language_data): Delete la_printchar
+       initializer.
+       * opencl-lang.c (opencl_language_data): Likewise.
+       * p-lang.c (pascal_language_data): Delete la_printchar
+       initializer.
+       (pascal_language::printchar): New member function.
+       * rust-lang.c (rust_printchar): Rename to
+       rust_language::printchar.
+       (rust_language_data): Delete la_printchar initializer.
+       (rust_language::printchar): New member function, implementation
+       from rust_printchar.
+
 2020-06-23  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * ada-lang.c (emit_char): Renamed to ada_language::emitchar.
index 7858679f5bcd6ea4a3f5c91874b50ce95620666d..e69c3cbf50c5425132e6a59048b473a2ce3b6bcf 100644 (file)
@@ -13681,7 +13681,6 @@ extern const struct language_data ada_language_data =
   macro_expansion_no,
   ada_extensions,
   &ada_exp_descriptor,
-  ada_printchar,                /* Print a character constant */
   ada_printstr,                 /* Function to print string constant */
   ada_print_typedef,            /* Print a typedef using appropriate syntax */
   NULL,                         /* name_of_this */
@@ -14115,6 +14114,14 @@ public:
     ada_emit_char (ch, chtype, stream, quoter, 1);
   }
 
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    ada_printchar (ch, chtype, stream);
+  }
+
 protected:
   /* See language.h.  */
 
index fbd564d0415ddfde4eed66ac1627a1922ca5a32c..f7b1b80cd5610a2bfce62b31801970fb9d2ed45c 100644 (file)
@@ -889,7 +889,6 @@ extern const struct language_data c_language_data =
   macro_expansion_c,
   c_extensions,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   NULL,                                /* name_of_this */
@@ -994,7 +993,6 @@ extern const struct language_data cplus_language_data =
   macro_expansion_c,
   cplus_extensions,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   "this",                       /* name_of_this */
@@ -1196,7 +1194,6 @@ extern const struct language_data asm_language_data =
   macro_expansion_c,
   asm_extensions,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   NULL,                                /* name_of_this */
@@ -1256,7 +1253,6 @@ extern const struct language_data minimal_language_data =
   macro_expansion_c,
   NULL,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   NULL,                                /* name_of_this */
index fa6df337389daf343881f5db2784f936c94ee09c..f76b74f18b481b17df88869c56ac7b224c2a8149 100644 (file)
@@ -142,7 +142,6 @@ extern const struct language_data d_language_data =
   macro_expansion_no,
   d_extensions,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant.  */
   c_printstr,                  /* Function to print string constant.  */
   c_print_typedef,             /* Print a typedef using appropriate
                                   syntax.  */
index 90b2e861286c47310b89bbbfb548734c618493b1..68d0a4e6d0c10578d185dc460c3eb818171c14a2 100644 (file)
@@ -41,8 +41,6 @@
 
 /* Local functions */
 
-static void f_printchar (int c, struct type *type, struct ui_file * stream);
-
 /* Return the encoding that should be used for the character type
    TYPE.  */
 
@@ -70,16 +68,6 @@ f_get_encoding (struct type *type)
   return encoding;
 }
 
-/* Implementation of la_printchar.  */
-
-static void
-f_printchar (int c, struct type *type, struct ui_file *stream)
-{
-  fputs_filtered ("'", stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
-  fputs_filtered ("'", stream);
-}
-
 /* Print the character string STRING, printing at most LENGTH characters.
    Printing stops early if the number hits print_max; repeat counts
    are printed as appropriate.  Print ellipses at the end if we
@@ -548,7 +536,6 @@ extern const struct language_data f_language_data =
   macro_expansion_no,
   f_extensions,
   &exp_descriptor_f,
-  f_printchar,                 /* Print character constant */
   f_printstr,                  /* function to print string constant */
   f_print_typedef,             /* Print a typedef using appropriate syntax */
   NULL,                        /* name_of_this */
@@ -710,6 +697,16 @@ public:
     generic_emit_char (ch, chtype, stream, quoter, encoding);
   }
 
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    fputs_filtered ("'", stream);
+    LA_EMIT_CHAR (ch, chtype, stream, '\'');
+    fputs_filtered ("'", stream);
+  }
+
 protected:
 
   /* See language.h.  */
index f167543278acc70c9fdeda19bf6c498d2efe11e4..819780bc30e6a9b13e33243645f05d3e1fc43393 100644 (file)
@@ -527,7 +527,6 @@ extern const struct language_data go_language_data =
   macro_expansion_no,
   NULL,
   &exp_descriptor_c,
-  c_printchar,                 /* Print a character constant.  */
   c_printstr,                  /* Function to print string constant.  */
   c_print_typedef,             /* Print a typedef using appropriate
                                   syntax.  */
index 6778646becd3804a40a75105191e4c7b70d6c5fc..34990e040cdc5d77a186025ed4b4d731c63e9542 100644 (file)
@@ -49,9 +49,6 @@
 
 static void set_range_case (void);
 
-static void unk_lang_printchar (int c, struct type *type,
-                               struct ui_file *stream);
-
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
    on the default language at startup, and then again based on the
@@ -663,6 +660,15 @@ language_defn::emitchar (int ch, struct type *chtype,
   c_emit_char (ch, chtype, stream, quoter);
 }
 
+/* See language.h.  */
+
+void
+language_defn::printchar (int ch, struct type *chtype,
+                         struct ui_file * stream) const
+{
+  c_printchar (ch, chtype, stream);
+}
+
 /* The default implementation of the get_symbol_name_matcher_inner method
    from the language_defn class.  Matches with strncmp_iw.  */
 
@@ -728,13 +734,6 @@ default_is_string_type_p (struct type *type)
   return (type->code ()  == TYPE_CODE_STRING);
 }
 
-static void
-unk_lang_printchar (int c, struct type *type, struct ui_file *stream)
-{
-  error (_("internal error - unimplemented "
-          "function unk_lang_printchar called."));
-}
-
 static void
 unk_lang_printstr (struct ui_file *stream, struct type *type,
                   const gdb_byte *string, unsigned int length,
@@ -773,7 +772,6 @@ extern const struct language_data unknown_language_data =
   macro_expansion_no,
   NULL,
   &exp_descriptor_standard,
-  unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   "this",                      /* name_of_this */
@@ -851,6 +849,14 @@ public:
   {
     error (_("unimplemented unknown_language::emitchar called"));
   }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    error (_("unimplemented unknown_language::printchar called"));
+  }
 };
 
 /* Single instance of the unknown language class.  */
@@ -870,7 +876,6 @@ extern const struct language_data auto_language_data =
   macro_expansion_no,
   NULL,
   &exp_descriptor_standard,
-  unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   "this",                      /* name_of_this */
@@ -948,6 +953,14 @@ public:
   {
     error (_("unimplemented auto_language::emitchar called"));
   }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    error (_("unimplemented auto_language::printchar called"));
+  }
 };
 
 /* Single instance of the fake "auto" language.  */
index 612afb3c5f131fd1e9d19d857fd47a1f5c431508..fc9efd8993993f1c9bc13869c73f0d275fc926fd 100644 (file)
@@ -225,9 +225,6 @@ struct language_data
 
     const struct exp_descriptor *la_exp_desc;
 
-    void (*la_printchar) (int ch, struct type *chtype,
-                         struct ui_file * stream);
-
     void (*la_printstr) (struct ui_file * stream, struct type *elttype,
                         const gdb_byte *string, unsigned int length,
                         const char *encoding, int force_ellipses,
@@ -547,6 +544,9 @@ struct language_defn : language_data
   virtual void emitchar (int ch, struct type *chtype,
                         struct ui_file *stream, int quoter) const;
 
+  virtual void printchar (int ch, struct type *chtype,
+                         struct ui_file * stream) const;
+
 protected:
 
   /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
@@ -649,7 +649,7 @@ extern enum language set_language (enum language);
   (current_language->value_print (val,stream,options))
 
 #define LA_PRINT_CHAR(ch, type, stream) \
-  (current_language->la_printchar(ch, type, stream))
+  (current_language->printchar (ch, type, stream))
 #define LA_PRINT_STRING(stream, elttype, string, length, encoding, force_ellipses, options) \
   (current_language->la_printstr(stream, elttype, string, length, \
                                 encoding, force_ellipses,options))
index d8f7f00528085dcef4b1f6e1cc64c34abb041ca0..bdb1a460aea7dd93570d74f76af894d41abf38db 100644 (file)
@@ -309,7 +309,6 @@ extern const struct language_data m2_language_data =
   macro_expansion_no,
   NULL,
   &exp_descriptor_modula2,
-  m2_printchar,                        /* Print character constant */
   m2_printstr,                 /* function to print string constant */
   m2_print_typedef,            /* Print a typedef using appropriate syntax */
   NULL,                                /* name_of_this */
@@ -426,6 +425,14 @@ public:
          }
       }
   }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    m2_printchar (ch, chtype, stream);
+  }
 };
 
 /* Single instance of the M2 language.  */
index ffde14a97aa01ad8086e08bd936e9bedd4832a1a..736c8684523f9436cc1033fbea0da5aec0b6b965 100644 (file)
@@ -337,7 +337,6 @@ extern const struct language_data objc_language_data =
   macro_expansion_c,
   objc_extensions,
   &exp_descriptor_standard,
-  c_printchar,                /* Print a character constant */
   c_printstr,                 /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   "self",                      /* name_of_this */
index 3789c211ca0a79a1c4b1b41509068a89d01a9385..d66f3f8aec3fa148f6035d106b05b0e839c3917d 100644 (file)
@@ -1016,7 +1016,6 @@ extern const struct language_data opencl_language_data =
   macro_expansion_c,
   NULL,
   &exp_descriptor_opencl,
-  c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   NULL,                         /* name_of_this */
index b0465f4a35563121e1b760f8834833e3bf5f03be..b8c99c4650f40293f60cae89f18983a1316752bb 100644 (file)
@@ -376,7 +376,6 @@ extern const struct language_data pascal_language_data =
   macro_expansion_no,
   p_extensions,
   &exp_descriptor_standard,
-  pascal_printchar,            /* Print a character constant */
   pascal_printstr,             /* Function to print string constant */
   pascal_print_typedef,                /* Print a typedef using appropriate syntax */
   "this",                      /* name_of_this */
@@ -491,6 +490,15 @@ public:
     if (in_quotes)
       fputs_filtered ("'", stream);
   }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    pascal_printchar (ch, chtype, stream);
+  }
+
 };
 
 /* Single instance of the Pascal language class.  */
index 2d6cb8bf0b1b268fa0f18352d5888939e2022808..36e26179f3456e7f92d237baaf7ed6254e2a556f 100644 (file)
@@ -281,16 +281,6 @@ rust_get_trait_object_pointer (struct value *value)
 
 \f
 
-/* la_printchar implementation for Rust.  */
-
-static void
-rust_printchar (int c, struct type *type, struct ui_file *stream)
-{
-  fputs_filtered ("'", stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
-  fputs_filtered ("'", stream);
-}
-
 /* la_printstr implementation for Rust.  */
 
 static void
@@ -1963,7 +1953,6 @@ extern const struct language_data rust_language_data =
   macro_expansion_no,
   rust_extensions,
   &exp_descriptor_rust,
-  rust_printchar,              /* Print a character constant */
   rust_printstr,               /* Function to print string constant */
   rust_print_typedef,          /* Print a typedef using appropriate syntax */
   NULL,                                /* name_of_this */
@@ -2146,6 +2135,16 @@ public:
     else
       fprintf_filtered (stream, "\\u{%06x}", ch);
   }
+
+  /* See language.h.  */
+
+  void printchar (int ch, struct type *chtype,
+                 struct ui_file *stream) const override
+  {
+    fputs_filtered ("'", stream);
+    LA_EMIT_CHAR (ch, chtype, stream, '\'');
+    fputs_filtered ("'", stream);
+  }
 };
 
 /* Single instance of the Rust language class.  */