Introduce la_value_print_inner
authorTom Tromey <tom@tromey.com>
Fri, 13 Mar 2020 23:39:52 +0000 (17:39 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 14 Mar 2020 00:03:39 +0000 (18:03 -0600)
The plan for removing val_print is, essentially, to first duplicate
printing code as needed to use the value API; and then remove the
val_print code.  This makes it possible to do the changes
incrementally while keeping everything working.

This adds a new la_value_print_inner function pointer to struct
language_defn.  Eventually this will replace la_val_print.  This patch
also changes printing to prefer this API, when available -- but no
language defines it yet.

gdb/ChangeLog
2020-03-13  Tom Tromey  <tom@tromey.com>

* valprint.c (do_val_print): Call la_value_print_inner, if
available.
* rust-lang.c (rust_language_defn): Update.
* p-lang.c (pascal_language_defn): Update.
* opencl-lang.c (opencl_language_defn): Update.
* objc-lang.c (objc_language_defn): Update.
* m2-lang.c (m2_language_defn): Update.
* language.h (struct language_defn) <la_value_print_inner>: New
member.
* language.c (unknown_language_defn, auto_language_defn): Update.
* go-lang.c (go_language_defn): Update.
* f-lang.c (f_language_defn): Update.
* d-lang.c (d_language_defn): Update.
* c-lang.c (c_language_defn, cplus_language_defn)
(asm_language_defn, minimal_language_defn): Update.
* ada-lang.c (ada_language_defn): Update.

14 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
gdb/valprint.c

index a66a918424433292a5a5a7d4c0dd1fe5891286d6..acd5bf0ad69affd184f3032893e39cb7680376a7 100644 (file)
@@ -1,3 +1,22 @@
+2020-03-13  Tom Tromey  <tom@tromey.com>
+
+       * valprint.c (do_val_print): Call la_value_print_inner, if
+       available.
+       * rust-lang.c (rust_language_defn): Update.
+       * p-lang.c (pascal_language_defn): Update.
+       * opencl-lang.c (opencl_language_defn): Update.
+       * objc-lang.c (objc_language_defn): Update.
+       * m2-lang.c (m2_language_defn): Update.
+       * language.h (struct language_defn) <la_value_print_inner>: New
+       member.
+       * language.c (unknown_language_defn, auto_language_defn): Update.
+       * go-lang.c (go_language_defn): Update.
+       * f-lang.c (f_language_defn): Update.
+       * d-lang.c (d_language_defn): Update.
+       * c-lang.c (c_language_defn, cplus_language_defn)
+       (asm_language_defn, minimal_language_defn): Update.
+       * ada-lang.c (ada_language_defn): Update.
+
 2020-03-13  Tom Tromey  <tom@tromey.com>
 
        * c-valprint.c (c_value_print): Use common_val_print.
index 316eaf50b9a197eb9c0921a8149b0cdf7c3974b3..fb3bfa5aba9fc9fb74a864bfdcc7858c74ba4448 100644 (file)
@@ -14110,6 +14110,7 @@ extern const struct language_defn ada_language_defn = {
   ada_print_type,               /* Print a type using appropriate syntax */
   ada_print_typedef,            /* Print a typedef using appropriate syntax */
   ada_val_print,                /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   ada_value_print,              /* Print a top-level value */
   ada_read_var_value,          /* la_read_var_value */
   NULL,                         /* Language specific skip_trampoline */
index cd3e1fffc7db1fdc524e338ef84857593fb1794c..3526674b2e6c074b66b86b60467da0c9896742d9 100644 (file)
@@ -904,6 +904,7 @@ extern const struct language_defn c_language_defn =
   c_print_type,                        /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
@@ -1049,6 +1050,7 @@ extern const struct language_defn cplus_language_defn =
   c_print_type,                        /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   cplus_skip_trampoline,       /* Language specific skip_trampoline */
@@ -1103,6 +1105,7 @@ extern const struct language_defn asm_language_defn =
   c_print_type,                        /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
@@ -1157,6 +1160,7 @@ extern const struct language_defn minimal_language_defn =
   c_print_type,                        /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index 76d173b61eab50fdf91015c2535c67f4fc8017d4..71dc4c6feb24950d85ac2c23e5f75ba95daea352 100644 (file)
@@ -225,6 +225,7 @@ extern const struct language_defn d_language_defn =
   c_print_typedef,             /* Print a typedef using appropriate
                                   syntax.  */
   d_val_print,                 /* Print a value using appropriate syntax.  */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value.  */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline.  */
index e767f52fc2102da9cd8c1fb7d14d99f34cdb5be7..4f4e8aedc4155531f200f2689bd5a2094d549960 100644 (file)
@@ -647,6 +647,7 @@ extern const struct language_defn f_language_defn =
   f_print_type,                        /* Print a type using appropriate syntax */
   f_print_typedef,             /* Print a typedef using appropriate syntax */
   f_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* FIXME */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index 9ad456f72e8e49877f41a14113d67cce17230c04..314c281197290266e13f6c47a0f6647f4f71976d 100644 (file)
@@ -596,6 +596,7 @@ extern const struct language_defn go_language_defn =
   c_print_typedef,             /* Print a typedef using appropriate
                                   syntax.  */
   go_val_print,                        /* Print a value using appropriate syntax.  */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value.  */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline.  */
index 03985d3e0cc092ef7722cf45f73f052a01785244..d1dfd2df92b580dbef427d39f374289cfd1d291e 100644 (file)
@@ -860,6 +860,7 @@ const struct language_defn unknown_language_defn =
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   unk_lang_value_print,                /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
@@ -911,6 +912,7 @@ const struct language_defn auto_language_defn =
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   unk_lang_value_print,                /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
index b344a4a2ca6acb3f3c2ae939a4c946f6430cbe2c..c6d5496cde3c771638d4dedc78b0b88a14258e33 100644 (file)
@@ -272,6 +272,13 @@ struct language_defn
                          struct value *val,
                          const struct value_print_options *options);
 
+    /* Print a value using syntax appropriate for this language.
+       RECURSE is the recursion depth.  It is zero-based.  */
+
+    void (*la_value_print_inner) (struct value *, struct ui_file *,
+                                 int recurse,
+                                 const struct value_print_options *);
+
     /* Print a top-level value using syntax appropriate for this language.  */
 
     void (*la_value_print) (struct value *, struct ui_file *,
index 1a97a58cec4f0aabf3fdea0ca15333b02bca77b4..31c248d60e48e163606e48d9d45a5de26cad8127 100644 (file)
@@ -394,6 +394,7 @@ extern const struct language_defn m2_language_defn =
   m2_print_type,               /* Print a type using appropriate syntax */
   m2_print_typedef,            /* Print a typedef using appropriate syntax */
   m2_val_print,                        /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index 5adf913a5e33e7eb6d335e7b65cfea0e75647c76..c277dc909476c7751cc31c7939e83b243a9a40f2 100644 (file)
@@ -382,6 +382,7 @@ extern const struct language_defn objc_language_defn = {
   c_print_type,                        /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   objc_skip_trampoline,        /* Language specific skip_trampoline */
index 1763590214fdbf7c25822d53dae7aa0f1eca37b8..c4afa3a2cd3d8f0a07e6b6ff280cf5c4947a6d5c 100644 (file)
@@ -1061,6 +1061,7 @@ extern const struct language_defn opencl_language_defn =
   opencl_print_type,           /* Print a type using appropriate syntax */
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index c17d1f3c40a5f1e8e532f7978e77945bd59107b3..bf74b800fb2c67f9cc5b670ed68dd017cde8deda 100644 (file)
@@ -448,6 +448,7 @@ extern const struct language_defn pascal_language_defn =
   pascal_print_type,           /* Print a type using appropriate syntax */
   pascal_print_typedef,                /* Print a typedef using appropriate syntax */
   pascal_val_print,            /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   pascal_value_print,          /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index fc48e3486aef940815b04572f438dd9f71e9fa72..881698a47de4013bd58996729d578e12bbd50754 100644 (file)
@@ -2154,6 +2154,7 @@ extern const struct language_defn rust_language_defn =
   rust_print_type,             /* Print a type using appropriate syntax */
   rust_print_typedef,          /* Print a typedef using appropriate syntax */
   rust_val_print,              /* Print a value using appropriate syntax */
+  nullptr,                     /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
   default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
index aab43d4b8110d0e73fe6769622faaac8ff54fc2f..e0a3424feaea5ff57e2912da4d630ec89ee33f52 100644 (file)
@@ -1092,9 +1092,13 @@ do_val_print (struct value *full_value,
 
   try
     {
-      language->la_val_print (type, embedded_offset, address,
-                             stream, recurse, val,
-                             &local_opts);
+      if (full_value != nullptr && language->la_value_print_inner != nullptr)
+       language->la_value_print_inner (full_value, stream, recurse,
+                                       &local_opts);
+      else
+       language->la_val_print (type, embedded_offset, address,
+                               stream, recurse, val,
+                               &local_opts);
     }
   catch (const gdb_exception_error &except)
     {