New field la_varobj_ops in struct language_defn
authorYao Qi <yao@codesourcery.com>
Thu, 17 Oct 2013 13:15:21 +0000 (21:15 +0800)
committerTom Tromey <tromey@sourceware.org>
Fri, 25 Oct 2013 14:03:02 +0000 (14:03 +0000)
This is a follow-up series to move language stuff out of varobj.c.

This patch adds a new field la_varobj_ops in struct language_defn so
that each language has varobj-related options.  Not every language
supports varobj, and the operations are identical to operations of c
languages.

'struct language_defn' is the ideal place to save all language-related
operations.  After this patch, some cleanups can be done in patch 2/2,
which removes language-related stuff completely from varobj.c.

Regression tested on x86_64-linux.

gdb:

2013-10-25  Yao Qi  <yao@codesourcery.com>

* language.h (struct lang_varobj_ops): Declare.
(struct language_defn) <la_varobj_ops>: New field.
* ada-lang.c: Include "varobj.h"
(defn ada_language_defn): Initialize field 'la_varobj_ops' by
ada_varobj_ops.
* c-lang.c: Include "varobj.h"
(c_language_defn): Initialize field 'la_varobj_ops' by
c_varobj_ops.
(cplus_language_defn): Initialize field 'la_varobj_ops' by
cplus_varobj_ops.
(asm_language_defn): Initialize field 'la_varobj_ops' by
default_varobj_ops.
(minimal_language_defn): Likewise.
* d-lang.c (d_language_defn): Likewise.
* f-lang.c (f_language_defn): Likewise.
* go-lang.c (go_language_defn): Likewise.
* m2-lang.c (m2_language_defn): Likewise.
* objc-lang.c (objc_language_defn): Likewise.
* opencl-lang.c (opencl_language_defn): Likewise.
* p-lang.c (pascal_language_defn): Likewise.
* language.c (unknown_language_defn): Likewise.
(auto_language_defn): Likewise.
(local_language_defn): Likewise.
* jv-lang.c (java_language_defn): Initialize field
'la_varobj_ops' by java_varobj_ops.
* varobj.c (varobj_create): Update.
* varobj.h (default_varobj_ops): Define macro.

15 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/jv-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/varobj.c
gdb/varobj.h

index 88b8340206b5ea3f8d5488537409466c00329e52..4dd055f1654a61236dd0bd94d0e46c6f565f1206 100644 (file)
@@ -1,3 +1,33 @@
+2013-10-25  Yao Qi  <yao@codesourcery.com>
+
+       * language.h (struct lang_varobj_ops): Declare.
+       (struct language_defn) <la_varobj_ops>: New field.
+       * ada-lang.c: Include "varobj.h"
+       (defn ada_language_defn): Initialize field 'la_varobj_ops' with
+       ada_varobj_ops.
+       * c-lang.c: Include "varobj.h"
+       (c_language_defn): Initialize field 'la_varobj_ops' with
+       c_varobj_ops.
+       (cplus_language_defn): Initialize field 'la_varobj_ops' with
+       cplus_varobj_ops.
+       (asm_language_defn): Initialize field 'la_varobj_ops' with
+       default_varobj_ops.
+       (minimal_language_defn): Likewise.
+       * d-lang.c (d_language_defn): Likewise.
+       * f-lang.c (f_language_defn): Likewise.
+       * go-lang.c (go_language_defn): Likewise.
+       * m2-lang.c (m2_language_defn): Likewise.
+       * objc-lang.c (objc_language_defn): Likewise.
+       * opencl-lang.c (opencl_language_defn): Likewise.
+       * p-lang.c (pascal_language_defn): Likewise.
+       * language.c (unknown_language_defn): Likewise.
+       (auto_language_defn): Likewise.
+       (local_language_defn): Likewise.
+       * jv-lang.c (java_language_defn): Initialize field
+       'la_varobj_ops' with java_varobj_ops.
+       * varobj.c (varobj_create): Update.
+       * varobj.h (default_varobj_ops): Define macro.
+
 2013-10-25  Pedro Alves  <palves@redhat.com>
 
        * cp-valprint.c (cp_print_value_fields): No longer handle a NULL
index 9ff3ab91f015d7a64732cb72eba8d913264715bb..75f9fe8916b6194e29fa58e6b668229bef6cef60 100644 (file)
@@ -32,6 +32,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "c-lang.h"
 #include "inferior.h"
 #include "symfile.h"
@@ -12834,6 +12835,7 @@ const struct language_defn ada_language_defn = {
   c_get_string,
   ada_get_symbol_name_cmp,     /* la_get_symbol_name_cmp */
   ada_iterate_over_symbols,
+  &ada_varobj_ops,
   LANG_MAGIC
 };
 
index 33bb4443f088215244d743014832bf3ddf202c5f..7c09029f25ab9b6dfc9bd2d41d590bb61e0e0182 100644 (file)
@@ -23,6 +23,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "c-lang.h"
 #include "valprint.h"
 #include "macroscope.h"
@@ -846,6 +847,7 @@ const struct language_defn c_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &c_varobj_ops,
   LANG_MAGIC
 };
 
@@ -969,6 +971,7 @@ const struct language_defn cplus_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &cplus_varobj_ops,
   LANG_MAGIC
 };
 
@@ -1010,6 +1013,7 @@ const struct language_defn asm_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
@@ -1056,6 +1060,7 @@ const struct language_defn minimal_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 15f56dfaf0c6f4a695f025ebee0d46c529f2f9d3..b4c866407ed68512af70c7ec3cac72b82626b354 100644 (file)
@@ -20,6 +20,7 @@
 #include "defs.h"
 #include "symtab.h"
 #include "language.h"
+#include "varobj.h"
 #include "d-lang.h"
 #include "c-lang.h"
 #include "gdb_string.h"
@@ -274,6 +275,7 @@ static const struct language_defn d_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index f40e98d38223f8468714adae072b08d9e602f7b1..ee525618b5586bdc59474c5968c3be0edf59c806 100644 (file)
@@ -27,6 +27,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "f-lang.h"
 #include "valprint.h"
 #include "value.h"
@@ -273,6 +274,7 @@ const struct language_defn f_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 309b1eb90b8a1220ba19b6022fd60238f8cac3da..fd0bae3c51f5d55d7f4be11213cfe5f832cc0d27 100644 (file)
@@ -38,6 +38,7 @@
 #include "block.h"
 #include "symtab.h"
 #include "language.h"
+#include "varobj.h"
 #include "go-lang.h"
 #include "c-lang.h"
 #include "parser-defs.h"
@@ -596,6 +597,7 @@ static const struct language_defn go_language_defn =
   c_get_string,
   NULL,
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 63bcc98fcd6663141114eb0be52935a0b4f22e85..9c2cc13376721f90a8402ff2aeab1bcedc77b531 100644 (file)
@@ -31,6 +31,7 @@
 #include "value.h"
 #include "c-lang.h"
 #include "jv-lang.h"
+#include "varobj.h"
 #include "gdbcore.h"
 #include "block.h"
 #include "demangle.h"
@@ -1196,6 +1197,7 @@ const struct language_defn java_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &java_varobj_ops,
   LANG_MAGIC
 };
 
index 10073e1a932c978fbd82132aa79725575416986d..dcad5f389b48cb64240ffbfd21a96afb62ab57e2 100644 (file)
@@ -38,6 +38,7 @@
 #include "gdbcmd.h"
 #include "expression.h"
 #include "language.h"
+#include "varobj.h"
 #include "target.h"
 #include "parser-defs.h"
 #include "jv-lang.h"
@@ -826,6 +827,7 @@ const struct language_defn unknown_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
@@ -869,6 +871,7 @@ const struct language_defn auto_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
@@ -910,6 +913,7 @@ const struct language_defn local_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 \f
index e36da31be69d7b1f370e8d2cbeb874da2eacf551..5e029ea00bad1eb65c5c8edc43b9f4b9d97fec54 100644 (file)
@@ -31,6 +31,7 @@ struct expression;
 struct ui_file;
 struct value_print_options;
 struct type_print_options;
+struct lang_varobj_ops;
 
 #define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims.  */
 
@@ -344,6 +345,9 @@ struct language_defn
                                     symbol_found_callback_ftype *callback,
                                     void *data);
 
+    /* Various operations on varobj.  */
+    const struct lang_varobj_ops *la_varobj_ops;
+
     /* Add fields above this point, so the magic number is always last.  */
     /* Magic number for compat checking.  */
 
index 31e9a5629a1df308d0c71f72b36c74f68516e4aa..158ca07061299653509d6e68929c848d76686f38 100644 (file)
@@ -23,6 +23,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "m2-lang.h"
 #include "c-lang.h"
 #include "valprint.h"
@@ -391,6 +392,7 @@ const struct language_defn m2_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index bcce4356c7de6e149cb2d818f00e0943e707be5d..efec3b3e0159fa0398731b039be64892c21ce7df 100644 (file)
@@ -26,6 +26,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "c-lang.h"
 #include "objc-lang.h"
 #include "exceptions.h"
@@ -389,6 +390,7 @@ const struct language_defn objc_language_defn = {
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 4720e2b194409934797a44cc6e69bfb5bc8ac4d5..faf88d98f35ecbb5441ced3ff8d493299e8625e8 100644 (file)
@@ -26,6 +26,7 @@
 #include "parser-defs.h"
 #include "symtab.h"
 #include "language.h"
+#include "varobj.h"
 #include "c-lang.h"
 #include "gdb_assert.h"
 
@@ -1137,6 +1138,7 @@ const struct language_defn opencl_language_defn =
   c_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 07006cd079c7dbcabab1c514ee08746a84fe3e25..d23919066b55148973cbfa9db0645b1c0d89cc27 100644 (file)
@@ -26,6 +26,7 @@
 #include "expression.h"
 #include "parser-defs.h"
 #include "language.h"
+#include "varobj.h"
 #include "p-lang.h"
 #include "valprint.h"
 #include "value.h"
@@ -449,6 +450,7 @@ const struct language_defn pascal_language_defn =
   default_get_string,
   NULL,                                /* la_get_symbol_name_cmp */
   iterate_over_symbols,
+  &default_varobj_ops,
   LANG_MAGIC
 };
 
index 01cf3d2a1d0a48ffcd1fc107e6b46e7ab1d370f8..60ed81015f1aac200de5d0d1c87e9818f2635595 100644 (file)
@@ -318,7 +318,6 @@ varobj_create (char *objname,
       struct frame_id old_id = null_frame_id;
       struct block *block;
       const char *p;
-      enum varobj_languages lang;
       struct value *value = NULL;
       volatile struct gdb_exception except;
       CORE_ADDR pc;
@@ -433,8 +432,7 @@ varobj_create (char *objname,
          }
 
       /* Set language info */
-      lang = variable_language (var);
-      var->root->lang = languages[lang];
+      var->root->lang = var->root->exp->language_defn->la_varobj_ops;
 
       install_new_value (var, value, 1 /* Initial assignment */);
 
index 7efaedb5e00557b592aa34a1e227ffc8b86f302c..2379c3d9c3074619fd4e7efce3d42e845d890a95 100644 (file)
@@ -230,6 +230,7 @@ const struct lang_varobj_ops cplus_varobj_ops;
 const struct lang_varobj_ops java_varobj_ops;
 const struct lang_varobj_ops ada_varobj_ops;
 
+#define default_varobj_ops c_varobj_ops
 /* API functions */
 
 extern struct varobj *varobj_create (char *objname,