public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages
  2013-10-18  0:54 [PATCH 1/2] New field la_varobj_ops in struct language_defn Yao Qi
@ 2013-10-18  0:54 ` Yao Qi
  2013-10-25  4:15   ` Joel Brobecker
  2013-10-25  3:34 ` [PATCH 1/2] New field la_varobj_ops " Joel Brobecker
  1 sibling, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-18  0:54 UTC (permalink / raw)
  To: gdb-patches

This patch does some cleanups, removing some language-related stuff.
Note that mi_cmd_var_info_expression uses varobj_language_string,
which is redundant, because we can get language name from
lang->la_name and capitalize the first letter.

varobj_language_string doesn't have "Ada", which looks like a bug to
me.  With this patch applied, this problem doesn't exist, because the
language name is got from the same place (field la_name).

gdb:

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

	* mi/mi-cmd-var.c: Include "language.h" and <ctype.h>.
	(mi_cmd_var_info_expression): Get language name from
	language_defn.
	* varobj.c (varobj_language_string): Remove.
	(variable_language): Remove declaration.
	(languages): Remove.
	(varobj_get_language): Change the type of return value.
	(variable_language): Remove.
	* varobj.h (enum varobj_languages): Remove.
	(varobj_language_string): Remove declaration.
	(varobj_get_language): Update declaration.
---
 gdb/mi/mi-cmd-var.c |   12 ++++++++++--
 gdb/varobj.c        |   43 ++-----------------------------------------
 gdb/varobj.h        |   12 +-----------
 3 files changed, 13 insertions(+), 54 deletions(-)

diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 57a2f6b..59202ff 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -24,12 +24,14 @@
 #include "ui-out.h"
 #include "mi-out.h"
 #include "varobj.h"
+#include "language.h"
 #include "value.h"
 #include <ctype.h>
 #include "gdb_string.h"
 #include "mi-getopt.h"
 #include "gdbthread.h"
 #include "mi-parse.h"
+#include <ctype.h>
 
 extern unsigned int varobjdebug;		/* defined in varobj.c.  */
 
@@ -479,8 +481,9 @@ void
 mi_cmd_var_info_expression (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
-  enum varobj_languages lang;
+  const struct language_defn *lang;
   struct varobj *var;
+  char *name;
 
   if (argc != 1)
     error (_("-var-info-expression: Usage: NAME."));
@@ -489,9 +492,14 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
   var = varobj_get_handle (argv[0]);
 
   lang = varobj_get_language (var);
+  name = xstrdup (lang->la_name);
+  /* Capitalize it.  */
+  name[0] = toupper (name[0]);
 
-  ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
+  ui_out_field_string (uiout, "lang", name);
   ui_out_field_string (uiout, "exp", varobj_get_expression (var));
+
+  xfree (name);
 }
 
 void
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 60ed810..8989aae 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -55,9 +55,6 @@ show_varobjdebug (struct ui_file *file, int from_tty,
 char *varobj_format_string[] =
   { "natural", "binary", "decimal", "hexadecimal", "octal" };
 
-/* String representations of gdb's known languages.  */
-char *varobj_language_string[] = { "C", "C++", "Java" };
-
 /* True if we want to allow Python-based pretty-printing.  */
 static int pretty_printing = 0;
 
@@ -199,8 +196,6 @@ static int install_new_value (struct varobj *var, struct value *value,
 
 /* Language-specific routines.  */
 
-static enum varobj_languages variable_language (struct varobj *var);
-
 static int number_of_children (struct varobj *);
 
 static char *name_of_variable (struct varobj *);
@@ -224,14 +219,6 @@ static struct varobj *varobj_add_child (struct varobj *var,
 
 #endif /* HAVE_PYTHON */
 
-/* Array of known source language routines.  */
-static const struct lang_varobj_ops *languages[vlang_end] = {
-  &c_varobj_ops,
-  &cplus_varobj_ops,
-  &java_varobj_ops,
-  &ada_varobj_ops,
-};
-
 /* Private data */
 
 /* Mappings of varobj_display_formats enums to gdb's format codes.  */
@@ -1126,10 +1113,10 @@ varobj_get_path_expr (struct varobj *var)
     }
 }
 
-enum varobj_languages
+const struct language_defn *
 varobj_get_language (struct varobj *var)
 {
-  return variable_language (var);
+  return var->root->exp->language_defn;
 }
 
 int
@@ -2332,32 +2319,6 @@ cppop (struct cpstack **pstack)
 
 /* Common entry points */
 
-/* Get the language of variable VAR.  */
-static enum varobj_languages
-variable_language (struct varobj *var)
-{
-  enum varobj_languages lang;
-
-  switch (var->root->exp->language_defn->la_language)
-    {
-    default:
-    case language_c:
-      lang = vlang_c;
-      break;
-    case language_cplus:
-      lang = vlang_cplus;
-      break;
-    case language_java:
-      lang = vlang_java;
-      break;
-    case language_ada:
-      lang = vlang_ada;
-      break;
-    }
-
-  return lang;
-}
-
 /* Return the number of children for a given variable.
    The result of this function is defined by the language
    implementation.  The number of children returned by this function
diff --git a/gdb/varobj.h b/gdb/varobj.h
index f56810c..1748433 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -52,16 +52,6 @@ enum varobj_scope_status
 /* String representations of gdb's format codes (defined in varobj.c).  */
 extern char *varobj_format_string[];
 
-/* Languages supported by this variable objects system.  This enum is used
-   to index arrays so we make its first enum explicitly zero.  */
-enum varobj_languages
-  {
-    vlang_c = 0, vlang_cplus, vlang_java, vlang_ada, vlang_end
-  };
-
-/* String representations of gdb's known languages (defined in varobj.c).  */
-extern char *varobj_language_string[];
-
 /* Struct thar describes a variable object instance.  */
 
 struct varobj;
@@ -286,7 +276,7 @@ extern struct type *varobj_get_gdb_type (struct varobj *var);
 
 extern char *varobj_get_path_expr (struct varobj *var);
 
-extern enum varobj_languages varobj_get_language (struct varobj *var);
+extern const struct language_defn *varobj_get_language (struct varobj *var);
 
 extern int varobj_get_attributes (struct varobj *var);
 
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/2] New field la_varobj_ops in struct language_defn
@ 2013-10-18  0:54 Yao Qi
  2013-10-18  0:54 ` [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages Yao Qi
  2013-10-25  3:34 ` [PATCH 1/2] New field la_varobj_ops " Joel Brobecker
  0 siblings, 2 replies; 21+ messages in thread
From: Yao Qi @ 2013-10-18  0:54 UTC (permalink / raw)
  To: gdb-patches

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-18  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.
---
 gdb/ada-lang.c    |    2 ++
 gdb/c-lang.c      |    5 +++++
 gdb/d-lang.c      |    2 ++
 gdb/f-lang.c      |    2 ++
 gdb/go-lang.c     |    2 ++
 gdb/jv-lang.c     |    2 ++
 gdb/language.c    |    4 ++++
 gdb/language.h    |    4 ++++
 gdb/m2-lang.c     |    2 ++
 gdb/objc-lang.c   |    2 ++
 gdb/opencl-lang.c |    2 ++
 gdb/p-lang.c      |    2 ++
 gdb/varobj.c      |    4 +---
 gdb/varobj.h      |    1 +
 14 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 9ff3ab9..75f9fe8 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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
 };
 
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 33bb444..85b669a 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -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
 };
 
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 15f56df..ec62e12 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -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
 };
 
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index f40e98d..7324c37 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -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
 };
 
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index 309b1eb..2e8b529 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -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
 };
 
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 63bcc98..9c2cc13 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -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
 };
 
diff --git a/gdb/language.c b/gdb/language.c
index 10073e1..7b67750 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -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
diff --git a/gdb/language.h b/gdb/language.h
index e36da31..5e029ea 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -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.  */
 
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 31e9a56..f6f4f3e 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -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
 };
 
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index bcce435..62622e4 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -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
 };
 
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 4720e2b..bbf8eab 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -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
 };
 
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 07006cd..467a0fd 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -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
 };
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 01cf3d2..60ed810 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -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 */);
 
diff --git a/gdb/varobj.h b/gdb/varobj.h
index e32c6ef..f56810c 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -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,
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] New field la_varobj_ops in struct language_defn
  2013-10-18  0:54 [PATCH 1/2] New field la_varobj_ops in struct language_defn Yao Qi
  2013-10-18  0:54 ` [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages Yao Qi
@ 2013-10-25  3:34 ` Joel Brobecker
  2013-10-25 13:16   ` Yao Qi
  2013-10-27 12:04   ` Rename field 'lang' to 'lang_ops' ([PATCH 1/2] New field la_varobj_ops in struct language_defn) Yao Qi
  1 sibling, 2 replies; 21+ messages in thread
From: Joel Brobecker @ 2013-10-25  3:34 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

> 2013-10-18  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.

The change looks mostly OK to me.

My only real comment is that I'd rather we define default_varobj_ops
without the '&' so that uses of that macro is similar to the case
where the macro isn't used. OK with that change.

Also, as a followup, I think it would be beneficial if we renamed
field "lang" in the varobj_root into "lang_ops". I think it's more
descriptive, especially since "lang" is used elsewhere with different
meanings (and types).

> --- a/gdb/varobj.h
> +++ b/gdb/varobj.h
> @@ -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,
> -- 
> 1.7.7.6

-- 
Joel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages
  2013-10-18  0:54 ` [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages Yao Qi
@ 2013-10-25  4:15   ` Joel Brobecker
  2013-10-25 13:38     ` Yao Qi
  2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
  0 siblings, 2 replies; 21+ messages in thread
From: Joel Brobecker @ 2013-10-25  4:15 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

> This patch does some cleanups, removing some language-related stuff.
> Note that mi_cmd_var_info_expression uses varobj_language_string,
> which is redundant, because we can get language name from
> lang->la_name and capitalize the first letter.

I think this can do for now because it is good enough, but I would
definitely prefer we avoid this type transformation. Instead,
I'd rather we added a new field in struct language_defn that
provides the "natural" name.

> varobj_language_string doesn't have "Ada", which looks like a bug to
> me.  With this patch applied, this problem doesn't exist, because the
> language name is got from the same place (field la_name).

Indeed, there was a bug there, and we're lucky (or maybe not!)
it didn't crash the debugger.  I like it better also that we're
no longer depending on a parallel array like this anymore. If we
were, I'd probably implement a consistency check similar to what
we have in osabi.

> 2013-10-18  Yao Qi  <yao@codesourcery.com>
> 
> 	* mi/mi-cmd-var.c: Include "language.h" and <ctype.h>.
> 	(mi_cmd_var_info_expression): Get language name from
> 	language_defn.
> 	* varobj.c (varobj_language_string): Remove.
> 	(variable_language): Remove declaration.
> 	(languages): Remove.
> 	(varobj_get_language): Change the type of return value.
> 	(variable_language): Remove.
> 	* varobj.h (enum varobj_languages): Remove.
> 	(varobj_language_string): Remove declaration.
> 	(varobj_get_language): Update declaration.

Personally, I would do the language_defn update first, and then get
rid of the xstrdup/toupper/xfree dance. But I'm open to others'
opinion.

Note that <ctype.h> was already included.

> ---
>  gdb/mi/mi-cmd-var.c |   12 ++++++++++--
>  gdb/varobj.c        |   43 ++-----------------------------------------
>  gdb/varobj.h        |   12 +-----------
>  3 files changed, 13 insertions(+), 54 deletions(-)
> 
> diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
> index 57a2f6b..59202ff 100644
> --- a/gdb/mi/mi-cmd-var.c
> +++ b/gdb/mi/mi-cmd-var.c
> @@ -24,12 +24,14 @@
>  #include "ui-out.h"
>  #include "mi-out.h"
>  #include "varobj.h"
> +#include "language.h"
>  #include "value.h"
>  #include <ctype.h>
>  #include "gdb_string.h"
>  #include "mi-getopt.h"
>  #include "gdbthread.h"
>  #include "mi-parse.h"
> +#include <ctype.h>
>  
>  extern unsigned int varobjdebug;		/* defined in varobj.c.  */
>  
> @@ -479,8 +481,9 @@ void
>  mi_cmd_var_info_expression (char *command, char **argv, int argc)
>  {
>    struct ui_out *uiout = current_uiout;
> -  enum varobj_languages lang;
> +  const struct language_defn *lang;
>    struct varobj *var;
> +  char *name;
>  
>    if (argc != 1)
>      error (_("-var-info-expression: Usage: NAME."));
> @@ -489,9 +492,14 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
>    var = varobj_get_handle (argv[0]);
>  
>    lang = varobj_get_language (var);
> +  name = xstrdup (lang->la_name);
> +  /* Capitalize it.  */
> +  name[0] = toupper (name[0]);
>  
> -  ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
> +  ui_out_field_string (uiout, "lang", name);
>    ui_out_field_string (uiout, "exp", varobj_get_expression (var));
> +
> +  xfree (name);
>  }
>  
>  void
> diff --git a/gdb/varobj.c b/gdb/varobj.c
> index 60ed810..8989aae 100644
> --- a/gdb/varobj.c
> +++ b/gdb/varobj.c
> @@ -55,9 +55,6 @@ show_varobjdebug (struct ui_file *file, int from_tty,
>  char *varobj_format_string[] =
>    { "natural", "binary", "decimal", "hexadecimal", "octal" };
>  
> -/* String representations of gdb's known languages.  */
> -char *varobj_language_string[] = { "C", "C++", "Java" };
> -
>  /* True if we want to allow Python-based pretty-printing.  */
>  static int pretty_printing = 0;
>  
> @@ -199,8 +196,6 @@ static int install_new_value (struct varobj *var, struct value *value,
>  
>  /* Language-specific routines.  */
>  
> -static enum varobj_languages variable_language (struct varobj *var);
> -
>  static int number_of_children (struct varobj *);
>  
>  static char *name_of_variable (struct varobj *);
> @@ -224,14 +219,6 @@ static struct varobj *varobj_add_child (struct varobj *var,
>  
>  #endif /* HAVE_PYTHON */
>  
> -/* Array of known source language routines.  */
> -static const struct lang_varobj_ops *languages[vlang_end] = {
> -  &c_varobj_ops,
> -  &cplus_varobj_ops,
> -  &java_varobj_ops,
> -  &ada_varobj_ops,
> -};
> -
>  /* Private data */
>  
>  /* Mappings of varobj_display_formats enums to gdb's format codes.  */
> @@ -1126,10 +1113,10 @@ varobj_get_path_expr (struct varobj *var)
>      }
>  }
>  
> -enum varobj_languages
> +const struct language_defn *
>  varobj_get_language (struct varobj *var)
>  {
> -  return variable_language (var);
> +  return var->root->exp->language_defn;
>  }
>  
>  int
> @@ -2332,32 +2319,6 @@ cppop (struct cpstack **pstack)
>  
>  /* Common entry points */
>  
> -/* Get the language of variable VAR.  */
> -static enum varobj_languages
> -variable_language (struct varobj *var)
> -{
> -  enum varobj_languages lang;
> -
> -  switch (var->root->exp->language_defn->la_language)
> -    {
> -    default:
> -    case language_c:
> -      lang = vlang_c;
> -      break;
> -    case language_cplus:
> -      lang = vlang_cplus;
> -      break;
> -    case language_java:
> -      lang = vlang_java;
> -      break;
> -    case language_ada:
> -      lang = vlang_ada;
> -      break;
> -    }
> -
> -  return lang;
> -}
> -
>  /* Return the number of children for a given variable.
>     The result of this function is defined by the language
>     implementation.  The number of children returned by this function
> diff --git a/gdb/varobj.h b/gdb/varobj.h
> index f56810c..1748433 100644
> --- a/gdb/varobj.h
> +++ b/gdb/varobj.h
> @@ -52,16 +52,6 @@ enum varobj_scope_status
>  /* String representations of gdb's format codes (defined in varobj.c).  */
>  extern char *varobj_format_string[];
>  
> -/* Languages supported by this variable objects system.  This enum is used
> -   to index arrays so we make its first enum explicitly zero.  */
> -enum varobj_languages
> -  {
> -    vlang_c = 0, vlang_cplus, vlang_java, vlang_ada, vlang_end
> -  };
> -
> -/* String representations of gdb's known languages (defined in varobj.c).  */
> -extern char *varobj_language_string[];
> -
>  /* Struct thar describes a variable object instance.  */
>  
>  struct varobj;
> @@ -286,7 +276,7 @@ extern struct type *varobj_get_gdb_type (struct varobj *var);
>  
>  extern char *varobj_get_path_expr (struct varobj *var);
>  
> -extern enum varobj_languages varobj_get_language (struct varobj *var);
> +extern const struct language_defn *varobj_get_language (struct varobj *var);
>  
>  extern int varobj_get_attributes (struct varobj *var);
>  
> -- 
> 1.7.7.6

-- 
Joel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/2] New field la_varobj_ops in struct language_defn
  2013-10-25  3:34 ` [PATCH 1/2] New field la_varobj_ops " Joel Brobecker
@ 2013-10-25 13:16   ` Yao Qi
  2013-10-27 12:04   ` Rename field 'lang' to 'lang_ops' ([PATCH 1/2] New field la_varobj_ops in struct language_defn) Yao Qi
  1 sibling, 0 replies; 21+ messages in thread
From: Yao Qi @ 2013-10-25 13:16 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On 10/25/2013 11:34 AM, Joel Brobecker wrote:
> My only real comment is that I'd rather we define default_varobj_ops
> without the '&' so that uses of that macro is similar to the case
> where the macro isn't used. OK with that change.

OK.  Patch below is committed.

> 
> Also, as a followup, I think it would be beneficial if we renamed
> field "lang" in the varobj_root into "lang_ops". I think it's more
> descriptive, especially since "lang" is used elsewhere with different
> meanings (and types).

I'll post a patch for this.

-- 
Yao (齐尧)

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.
---
 gdb/ada-lang.c    |    2 ++
 gdb/c-lang.c      |    5 +++++
 gdb/d-lang.c      |    2 ++
 gdb/f-lang.c      |    2 ++
 gdb/go-lang.c     |    2 ++
 gdb/jv-lang.c     |    2 ++
 gdb/language.c    |    4 ++++
 gdb/language.h    |    4 ++++
 gdb/m2-lang.c     |    2 ++
 gdb/objc-lang.c   |    2 ++
 gdb/opencl-lang.c |    2 ++
 gdb/p-lang.c      |    2 ++
 gdb/varobj.c      |    4 +---
 gdb/varobj.h      |    1 +
 14 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 9ff3ab9..75f9fe8 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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
 };
 
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 33bb444..7c09029 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -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
 };
 
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 15f56df..b4c8664 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -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
 };
 
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index f40e98d..ee52561 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -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
 };
 
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index 309b1eb..fd0bae3 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -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
 };
 
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 63bcc98..9c2cc13 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -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
 };
 
diff --git a/gdb/language.c b/gdb/language.c
index 10073e1..dcad5f3 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -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
diff --git a/gdb/language.h b/gdb/language.h
index e36da31..5e029ea 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -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.  */
 
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 31e9a56..158ca07 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -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
 };
 
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index bcce435..efec3b3 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -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
 };
 
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 4720e2b..faf88d9 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -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
 };
 
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 07006cd..d239190 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -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
 };
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 01cf3d2..60ed810 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -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 */);
 
diff --git a/gdb/varobj.h b/gdb/varobj.h
index 7efaedb..2379c3d 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -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,
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages
  2013-10-25  4:15   ` Joel Brobecker
@ 2013-10-25 13:38     ` Yao Qi
  2013-10-26  4:09       ` Joel Brobecker
  2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
  1 sibling, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-25 13:38 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On 10/25/2013 12:15 PM, Joel Brobecker wrote:
> I think this can do for now because it is good enough, but I would
> definitely prefer we avoid this type transformation. Instead,
> I'd rather we added a new field in struct language_defn that
> provides the "natural" name.
>

I am OK to add a new field "la_varobj_name" in struct language_defn, but 
seems information is duplicated a little, we have both "c++" and "C++" 
in one language_defn.

>> >2013-10-18  Yao Qi<yao@codesourcery.com>
>> >
>> >	* mi/mi-cmd-var.c: Include "language.h" and <ctype.h>.
>> >	(mi_cmd_var_info_expression): Get language name from
>> >	language_defn.
>> >	* varobj.c (varobj_language_string): Remove.
>> >	(variable_language): Remove declaration.
>> >	(languages): Remove.
>> >	(varobj_get_language): Change the type of return value.
>> >	(variable_language): Remove.
>> >	* varobj.h (enum varobj_languages): Remove.
>> >	(varobj_language_string): Remove declaration.
>> >	(varobj_get_language): Update declaration.
> Personally, I would do the language_defn update first, and then get
> rid of the xstrdup/toupper/xfree dance. But I'm open to others'
> opinion.

One drawback of xstrdup/toupper/xfree dance is that we loose the freedom 
to show language name in varobj.  I'll post patches in the way you 
suggested if no one else has other comments here.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages
  2013-10-25 13:38     ` Yao Qi
@ 2013-10-26  4:09       ` Joel Brobecker
  0 siblings, 0 replies; 21+ messages in thread
From: Joel Brobecker @ 2013-10-26  4:09 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

> >I think this can do for now because it is good enough, but I would
> >definitely prefer we avoid this type transformation. Instead,
> >I'd rather we added a new field in struct language_defn that
> >provides the "natural" name.
> >
> 
> I am OK to add a new field "la_varobj_name" in struct language_defn,
> but seems information is duplicated a little, we have both "c++" and
> "C++" in one language_defn.

It would not be a "varobj" name, but a "natural" name, that is the
name one would use when naming the language; eg: "Fortran 90" instead of
"f90". One possible analogy in our code base is the shortname/longname
distinction in struct target_ops.

-- 
Joel

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Rename field 'lang' to 'lang_ops'  ([PATCH 1/2] New field la_varobj_ops in struct language_defn)
  2013-10-25  3:34 ` [PATCH 1/2] New field la_varobj_ops " Joel Brobecker
  2013-10-25 13:16   ` Yao Qi
@ 2013-10-27 12:04   ` Yao Qi
  1 sibling, 0 replies; 21+ messages in thread
From: Yao Qi @ 2013-10-27 12:04 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On 10/25/2013 11:34 AM, Joel Brobecker wrote:
> Also, as a followup, I think it would be beneficial if we renamed
> field "lang" in the varobj_root into "lang_ops". I think it's more
> descriptive, especially since "lang" is used elsewhere with different
> meanings (and types).

Here is the patch to rename 'lang' to 'lang_ops'.  Committed as obvious.

-- 
Yao (齐尧)

gdb:

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

	* varobj.c (struct varobj_root) <lang>: Rename to 'lang_ops'.
	(varobj_create, varobj_get_path_expr): Update.
	(varobj_value_has_mutated, varobj_update): Likewise.
	(create_child_with_value, new_root_variable): Likewise.
	(number_of_children, name_of_variable): Likewise.
	(value_of_child, my_value_of_variable): Likewise.
	(varobj_value_is_changeable_p): Likewise.
---
 gdb/varobj.c |   30 +++++++++++++++---------------
 1 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/gdb/varobj.c b/gdb/varobj.c
index 60ed810..e1b9909 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -102,7 +102,7 @@ struct varobj_root
 
   /* Language-related operations for this variable and its
      children.  */
-  const struct lang_varobj_ops *lang;
+  const struct lang_varobj_ops *lang_ops;
 
   /* The varobj for this root node.  */
   struct varobj *rootvar;
@@ -432,7 +432,7 @@ varobj_create (char *objname,
 	  }
 
       /* Set language info */
-      var->root->lang = var->root->exp->language_defn->la_varobj_ops;
+      var->root->lang_ops = var->root->exp->language_defn->la_varobj_ops;
 
       install_new_value (var, value, 1 /* Initial assignment */);
 
@@ -1122,7 +1122,7 @@ varobj_get_path_expr (struct varobj *var)
 	 when creating varobj, so here it should be
 	 child varobj.  */
       gdb_assert (!is_root_p (var));
-      return (*var->root->lang->path_expr_of_child) (var);
+      return (*var->root->lang_ops->path_expr_of_child) (var);
     }
 }
 
@@ -1661,8 +1661,8 @@ varobj_value_has_mutated (struct varobj *var, struct value *new_value,
   if (var->num_children < 0)
     return 0;
 
-  if (var->root->lang->value_has_mutated)
-    return var->root->lang->value_has_mutated (var, new_value, new_type);
+  if (var->root->lang_ops->value_has_mutated)
+    return var->root->lang_ops->value_has_mutated (var, new_value, new_type);
   else
     return 0;
 }
@@ -1770,7 +1770,7 @@ varobj_update (struct varobj **varp, int explicit)
 	  if (new)
 	    new_type = value_type (new);
 	  else
-	    new_type = v->root->lang->type_of_child (v->parent, v->index);
+	    new_type = v->root->lang_ops->type_of_child (v->parent, v->index);
 
 	  if (varobj_value_has_mutated (v, new, new_type))
 	    {
@@ -2146,8 +2146,8 @@ create_child_with_value (struct varobj *parent, int index, char *name,
     child->type = value_actual_type (value, 0, NULL);
   else
     /* Otherwise, we must compute the type.  */
-    child->type = (*child->root->lang->type_of_child) (child->parent, 
-						       child->index);
+    child->type = (*child->root->lang_ops->type_of_child) (child->parent, 
+							   child->index);
   install_new_value (child, value, 1);
 
   return child;
@@ -2200,7 +2200,7 @@ new_root_variable (void)
   struct varobj *var = new_variable ();
 
   var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));
-  var->root->lang = NULL;
+  var->root->lang_ops = NULL;
   var->root->exp = NULL;
   var->root->valid_block = NULL;
   var->root->frame = null_frame_id;
@@ -2366,7 +2366,7 @@ variable_language (struct varobj *var)
 static int
 number_of_children (struct varobj *var)
 {
-  return (*var->root->lang->number_of_children) (var);
+  return (*var->root->lang_ops->number_of_children) (var);
 }
 
 /* What is the expression for the root varobj VAR? Returns a malloc'd
@@ -2374,7 +2374,7 @@ number_of_children (struct varobj *var)
 static char *
 name_of_variable (struct varobj *var)
 {
-  return (*var->root->lang->name_of_variable) (var);
+  return (*var->root->lang_ops->name_of_variable) (var);
 }
 
 /* What is the name of the INDEX'th child of VAR? Returns a malloc'd
@@ -2382,7 +2382,7 @@ name_of_variable (struct varobj *var)
 static char *
 name_of_child (struct varobj *var, int index)
 {
-  return (*var->root->lang->name_of_child) (var, index);
+  return (*var->root->lang_ops->name_of_child) (var, index);
 }
 
 /* If frame associated with VAR can be found, switch
@@ -2569,7 +2569,7 @@ value_of_child (struct varobj *parent, int index)
 {
   struct value *value;
 
-  value = (*parent->root->lang->value_of_child) (parent, index);
+  value = (*parent->root->lang_ops->value_of_child) (parent, index);
 
   return value;
 }
@@ -2582,7 +2582,7 @@ my_value_of_variable (struct varobj *var, enum varobj_display_formats format)
     {
       if (var->dynamic->pretty_printer != NULL)
 	return varobj_value_get_print_value (var->value, var->format, var);
-      return (*var->root->lang->value_of_variable) (var, format);
+      return (*var->root->lang_ops->value_of_variable) (var, format);
     }
   else
     return NULL;
@@ -2761,7 +2761,7 @@ varobj_editable_p (struct varobj *var)
 int
 varobj_value_is_changeable_p (struct varobj *var)
 {
-  return var->root->lang->value_is_changeable_p (var);
+  return var->root->lang_ops->value_is_changeable_p (var);
 }
 
 /* Return 1 if that varobj is floating, that is is always evaluated in the
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
@ 2013-10-28 12:50       ` Yao Qi
  2013-10-28 18:52         ` Tom Tromey
  2013-10-28 12:50       ` [PATCH 2/3] New field 'la_natural_name' in struct language_defn Yao Qi
  2013-10-28 15:02       ` [PATCH 1/3] Constify 'la_name' " Tom Tromey
  2 siblings, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-28 12:50 UTC (permalink / raw)
  To: gdb-patches

This patch does some cleanups, removing some language-related stuff.
Note that mi_cmd_var_info_expression uses varobj_language_string,
which is redundant, because we can get language name from
lang->la_natural_name.

varobj_language_string doesn't have "Ada", which looks like a bug to
me.  With this patch applied, this problem doesn't exist, because the
language name is got from the same place (field la_natural_name).

gdb:

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

	* mi/mi-cmd-var.c: Include "language.h".
	(mi_cmd_var_info_expression): Get language name from
	language_defn.
	* varobj.c (varobj_language_string): Remove.
	(variable_language): Remove declaration.
	(languages): Remove.
	(varobj_get_language): Change the type of return value.
	(variable_language): Remove.
	* varobj.h (enum varobj_languages): Remove.
	(varobj_language_string): Remove declaration.
	(varobj_get_language): Update declaration.
---
 gdb/mi/mi-cmd-var.c |    5 +++--
 gdb/varobj.c        |   43 ++-----------------------------------------
 gdb/varobj.h        |   12 +-----------
 3 files changed, 6 insertions(+), 54 deletions(-)

diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 57a2f6b..0a2ef5c 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -24,6 +24,7 @@
 #include "ui-out.h"
 #include "mi-out.h"
 #include "varobj.h"
+#include "language.h"
 #include "value.h"
 #include <ctype.h>
 #include "gdb_string.h"
@@ -479,7 +480,7 @@ void
 mi_cmd_var_info_expression (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
-  enum varobj_languages lang;
+  const struct language_defn *lang;
   struct varobj *var;
 
   if (argc != 1)
@@ -490,7 +491,7 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
 
   lang = varobj_get_language (var);
 
-  ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
+  ui_out_field_string (uiout, "lang", lang->la_natural_name);
   ui_out_field_string (uiout, "exp", varobj_get_expression (var));
 }
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b5cf17d..f15c9de 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -55,9 +55,6 @@ show_varobjdebug (struct ui_file *file, int from_tty,
 char *varobj_format_string[] =
   { "natural", "binary", "decimal", "hexadecimal", "octal" };
 
-/* String representations of gdb's known languages.  */
-char *varobj_language_string[] = { "C", "C++", "Java" };
-
 /* True if we want to allow Python-based pretty-printing.  */
 static int pretty_printing = 0;
 
@@ -199,8 +196,6 @@ static int install_new_value (struct varobj *var, struct value *value,
 
 /* Language-specific routines.  */
 
-static enum varobj_languages variable_language (struct varobj *var);
-
 static int number_of_children (struct varobj *);
 
 static char *name_of_variable (struct varobj *);
@@ -224,14 +219,6 @@ static struct varobj *varobj_add_child (struct varobj *var,
 
 #endif /* HAVE_PYTHON */
 
-/* Array of known source language routines.  */
-static const struct lang_varobj_ops *languages[vlang_end] = {
-  &c_varobj_ops,
-  &cplus_varobj_ops,
-  &java_varobj_ops,
-  &ada_varobj_ops,
-};
-
 /* Private data */
 
 /* Mappings of varobj_display_formats enums to gdb's format codes.  */
@@ -1126,10 +1113,10 @@ varobj_get_path_expr (struct varobj *var)
     }
 }
 
-enum varobj_languages
+const struct language_defn *
 varobj_get_language (struct varobj *var)
 {
-  return variable_language (var);
+  return var->root->exp->language_defn;
 }
 
 int
@@ -2332,32 +2319,6 @@ cppop (struct cpstack **pstack)
 
 /* Common entry points */
 
-/* Get the language of variable VAR.  */
-static enum varobj_languages
-variable_language (struct varobj *var)
-{
-  enum varobj_languages lang;
-
-  switch (var->root->exp->language_defn->la_language)
-    {
-    default:
-    case language_c:
-      lang = vlang_c;
-      break;
-    case language_cplus:
-      lang = vlang_cplus;
-      break;
-    case language_java:
-      lang = vlang_java;
-      break;
-    case language_ada:
-      lang = vlang_ada;
-      break;
-    }
-
-  return lang;
-}
-
 /* Return the number of children for a given variable.
    The result of this function is defined by the language
    implementation.  The number of children returned by this function
diff --git a/gdb/varobj.h b/gdb/varobj.h
index 2379c3d..978d9b9 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -52,16 +52,6 @@ enum varobj_scope_status
 /* String representations of gdb's format codes (defined in varobj.c).  */
 extern char *varobj_format_string[];
 
-/* Languages supported by this variable objects system.  This enum is used
-   to index arrays so we make its first enum explicitly zero.  */
-enum varobj_languages
-  {
-    vlang_c = 0, vlang_cplus, vlang_java, vlang_ada, vlang_end
-  };
-
-/* String representations of gdb's known languages (defined in varobj.c).  */
-extern char *varobj_language_string[];
-
 /* Struct thar describes a variable object instance.  */
 
 struct varobj;
@@ -286,7 +276,7 @@ extern struct type *varobj_get_gdb_type (struct varobj *var);
 
 extern char *varobj_get_path_expr (struct varobj *var);
 
-extern enum varobj_languages varobj_get_language (struct varobj *var);
+extern const struct language_defn *varobj_get_language (struct varobj *var);
 
 extern int varobj_get_attributes (struct varobj *var);
 
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 1/3] Constify 'la_name' in struct language_defn
  2013-10-25  4:15   ` Joel Brobecker
  2013-10-25 13:38     ` Yao Qi
@ 2013-10-28 12:50     ` Yao Qi
  2013-10-28 12:50       ` [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages Yao Qi
                         ` (2 more replies)
  1 sibling, 3 replies; 21+ messages in thread
From: Yao Qi @ 2013-10-28 12:50 UTC (permalink / raw)
  To: gdb-patches

Hi,
When I add another name of language, I find field 'la_name' can be
'const char *'.  This patch is to constify it.

gdb:

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

	* language.c (language_str): Return const char *.
	(add_language): Add const to 'language_names'
	* language.h (struct language_defn) <la_name>: Add const.
	(language_str: Update declaration.
---
 gdb/language.c |    4 ++--
 gdb/language.h |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gdb/language.c b/gdb/language.c
index dcad5f3..aa708b9 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -485,7 +485,7 @@ language_def (enum language lang)
 }
 
 /* Return the language as a string.  */
-char *
+const char *
 language_str (enum language lang)
 {
   int i;
@@ -520,7 +520,7 @@ void
 add_language (const struct language_defn *lang)
 {
   /* For the "set language" command.  */
-  static char **language_names = NULL;
+  static const char **language_names = NULL;
   /* For the "help set language" command.  */
   char *language_set_doc = NULL;
 
diff --git a/gdb/language.h b/gdb/language.h
index 5e029ea..14aedb6 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -132,7 +132,7 @@ struct language_defn
   {
     /* Name of the language.  */
 
-    char *la_name;
+    const char *la_name;
 
     /* its symtab language-enum (defs.h).  */
 
@@ -488,7 +488,7 @@ extern enum language language_enum (char *str);
 
 extern const struct language_defn *language_def (enum language);
 
-extern char *language_str (enum language);
+extern const char *language_str (enum language);
 
 /* Add a language to the set known by GDB (at initialization time).  */
 
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 2/3] New field 'la_natural_name' in struct language_defn
  2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
  2013-10-28 12:50       ` [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages Yao Qi
@ 2013-10-28 12:50       ` Yao Qi
  2013-10-28 18:34         ` Tom Tromey
  2013-10-29  8:41         ` Yao Qi
  2013-10-28 15:02       ` [PATCH 1/3] Constify 'la_name' " Tom Tromey
  2 siblings, 2 replies; 21+ messages in thread
From: Yao Qi @ 2013-10-28 12:50 UTC (permalink / raw)
  To: gdb-patches

This patch adds "natural name" of each supported languages, which will
be used by the next patch.

gdb:

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

	* language.h (struct language_defn) <la_natural_name>: New field.
	* ada-lang.c (ada_language_defn): Initialize field 'la_natural_name'.
	* c-lang.c (c_language_defn): Likewise.
	(cplus_language_defn, asm_language_defn): Likewise.
	* d-lang.c (d_language_defn): Likewise.
	* f-lang.c (f_language_defn): Likewise.
	* go-lang.c (go_language_defn): Likewise.
	* jv-lang.c (java_language_defn): Likewise.
	* language.c (unknown_language_defn ): Likewise.
	(auto_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.
---
 gdb/ada-lang.c    |    1 +
 gdb/c-lang.c      |    4 ++++
 gdb/d-lang.c      |    1 +
 gdb/f-lang.c      |    1 +
 gdb/go-lang.c     |    1 +
 gdb/jv-lang.c     |    1 +
 gdb/language.c    |    3 +++
 gdb/language.h    |    4 ++++
 gdb/m2-lang.c     |    1 +
 gdb/objc-lang.c   |    1 +
 gdb/opencl-lang.c |    1 +
 gdb/p-lang.c      |    1 +
 12 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 75f9fe8..4b55460 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -12799,6 +12799,7 @@ ada_read_var_value (struct symbol *var, struct frame_info *frame)
 
 const struct language_defn ada_language_defn = {
   "ada",                        /* Language name */
+  "Ada",
   language_ada,
   range_check_off,
   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 7c09029..363d6ee 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -812,6 +812,7 @@ const struct exp_descriptor exp_descriptor_c =
 const struct language_defn c_language_defn =
 {
   "c",				/* Language name */
+  "C",
   language_c,
   range_check_off,
   case_sensitive_on,
@@ -936,6 +937,7 @@ cplus_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn cplus_language_defn =
 {
   "c++",			/* Language name */
+  "C++",
   language_cplus,
   range_check_off,
   case_sensitive_on,
@@ -978,6 +980,7 @@ const struct language_defn cplus_language_defn =
 const struct language_defn asm_language_defn =
 {
   "asm",			/* Language name */
+  "ASM",
   language_asm,
   range_check_off,
   case_sensitive_on,
@@ -1025,6 +1028,7 @@ const struct language_defn asm_language_defn =
 const struct language_defn minimal_language_defn =
 {
   "minimal",			/* Language name */
+  "Minimal",
   language_minimal,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index b4c8664..3dad91f 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -239,6 +239,7 @@ static const struct op_print d_op_print_tab[] =
 static const struct language_defn d_language_defn =
 {
   "d",
+  "D",
   language_d,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index ee52561..36560ce 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -239,6 +239,7 @@ f_make_symbol_completion_list (const char *text, const char *word,
 const struct language_defn f_language_defn =
 {
   "fortran",
+  "Fortran",
   language_fortran,
   range_check_on,
   case_sensitive_off,
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index fd0bae3..4da1af4 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -561,6 +561,7 @@ go_language_arch_info (struct gdbarch *gdbarch,
 static const struct language_defn go_language_defn =
 {
   "go",
+  "Go",
   language_go,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 9c2cc13..b154d4a 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -1163,6 +1163,7 @@ const struct exp_descriptor exp_descriptor_java =
 const struct language_defn java_language_defn =
 {
   "java",			/* Language name */
+  "Java",
   language_java,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/language.c b/gdb/language.c
index aa708b9..f1232a1 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -792,6 +792,7 @@ unknown_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn unknown_language_defn =
 {
   "unknown",
+  "Unknown",
   language_unknown,
   range_check_off,
   case_sensitive_on,
@@ -836,6 +837,7 @@ const struct language_defn unknown_language_defn =
 const struct language_defn auto_language_defn =
 {
   "auto",
+  "Auto",
   language_auto,
   range_check_off,
   case_sensitive_on,
@@ -878,6 +880,7 @@ const struct language_defn auto_language_defn =
 const struct language_defn local_language_defn =
 {
   "local",
+  "Local",
   language_auto,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/language.h b/gdb/language.h
index 14aedb6..c5f6824 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -134,6 +134,10 @@ struct language_defn
 
     const char *la_name;
 
+    /* Natural or official name of the language.  */
+
+    const char *la_natural_name;
+
     /* its symtab language-enum (defs.h).  */
 
     enum language la_language;
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 158ca07..db2ce7c 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -357,6 +357,7 @@ const struct exp_descriptor exp_descriptor_modula2 =
 const struct language_defn m2_language_defn =
 {
   "modula-2",
+  "Modula-2",
   language_m2,
   range_check_on,
   case_sensitive_on,
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index efec3b3..77a61ac 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -355,6 +355,7 @@ static const struct op_print objc_op_print_tab[] =
 
 const struct language_defn objc_language_defn = {
   "objective-c",		/* Language name */
+  "Objective-C",
   language_objc,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index faf88d9..1781d37 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -1103,6 +1103,7 @@ const struct exp_descriptor exp_descriptor_opencl =
 const struct language_defn opencl_language_defn =
 {
   "opencl",			/* Language name */
+  "OpenCL",
   language_opencl,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index d239190..bc59030 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -416,6 +416,7 @@ pascal_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn pascal_language_defn =
 {
   "pascal",			/* Language name */
+  "Pascal",
   language_pascal,
   range_check_on,
   case_sensitive_on,
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 1/3] Constify 'la_name' in struct language_defn
  2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
  2013-10-28 12:50       ` [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages Yao Qi
  2013-10-28 12:50       ` [PATCH 2/3] New field 'la_natural_name' in struct language_defn Yao Qi
@ 2013-10-28 15:02       ` Tom Tromey
  2 siblings, 0 replies; 21+ messages in thread
From: Tom Tromey @ 2013-10-28 15:02 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

>>>>> "Yao" == Yao Qi <yao@codesourcery.com> writes:

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

Yao> 	* language.c (language_str): Return const char *.
Yao> 	(add_language): Add const to 'language_names'
Yao> 	* language.h (struct language_defn) <la_name>: Add const.
Yao> 	(language_str: Update declaration.

Ok.

Tom

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/3] New field 'la_natural_name' in struct language_defn
  2013-10-28 12:50       ` [PATCH 2/3] New field 'la_natural_name' in struct language_defn Yao Qi
@ 2013-10-28 18:34         ` Tom Tromey
  2013-10-29  8:41         ` Yao Qi
  1 sibling, 0 replies; 21+ messages in thread
From: Tom Tromey @ 2013-10-28 18:34 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

>>>>> "Yao" == Yao Qi <yao@codesourcery.com> writes:

Yao> This patch adds "natural name" of each supported languages, which will
Yao> be used by the next patch.

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

Yao> 	* language.h (struct language_defn) <la_natural_name>: New field.
Yao> 	* ada-lang.c (ada_language_defn): Initialize field 'la_natural_name'.
Yao> 	* c-lang.c (c_language_defn): Likewise.
Yao> 	(cplus_language_defn, asm_language_defn): Likewise.
Yao> 	* d-lang.c (d_language_defn): Likewise.
Yao> 	* f-lang.c (f_language_defn): Likewise.
Yao> 	* go-lang.c (go_language_defn): Likewise.
Yao> 	* jv-lang.c (java_language_defn): Likewise.
Yao> 	* language.c (unknown_language_defn ): Likewise.
Yao> 	(auto_language_defn): Likewise.
Yao> 	* m2-lang.c (m2_language_defn): Likewise.
Yao> 	* objc-lang.c (objc_language_defn): Likewise.
Yao> 	* opencl-lang.c (opencl_language_defn): Likewise.
Yao> 	* p-lang.c (pascal_language_defn): Likewise.

Ok.

Tom

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-28 12:50       ` [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages Yao Qi
@ 2013-10-28 18:52         ` Tom Tromey
  2013-10-29  8:33           ` Yao Qi
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2013-10-28 18:52 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

>>>>> "Yao" == Yao Qi <yao@codesourcery.com> writes:

Yao> This patch does some cleanups, removing some language-related stuff.
Yao> Note that mi_cmd_var_info_expression uses varobj_language_string,
Yao> which is redundant, because we can get language name from
Yao> lang-> la_natural_name.

Yao> varobj_language_string doesn't have "Ada", which looks like a bug to
Yao> me.  With this patch applied, this problem doesn't exist, because the
Yao> language name is got from the same place (field la_natural_name).

I think this is an improvement, and I'm inclined to approve it.
However, two thoughts.

First, it can change the language reported by varobj commands.
Does this matter?

Second, the MI docs have a list of languages that can be reported:

    Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.

I think this needs to be updated.

Tom

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-28 18:52         ` Tom Tromey
@ 2013-10-29  8:33           ` Yao Qi
  2013-10-29 16:49             ` Eli Zaretskii
  0 siblings, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-29  8:33 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 10/29/2013 02:51 AM, Tom Tromey wrote:
> First, it can change the language reported by varobj commands.
> Does this matter?
> 

This patch affects varobj-unsupported languages.  Languages
supported varobj (C, C++, Java, Ada) are not affected.

If we use varobj commands on a varobj-unsupported language, such
as Go,

without this patch,

(gdb) interpreter-exec mi "-var-create m * main.main"
^done,name="m",numchild="0",value="{void (void)} 0x8049284 <main.main>",type="void (void)",has_more="0"
(gdb) interpreter-exec mi "-var-info-expression m"
^done,lang="C",exp="main.main"
           ^^^

with this patch,

(gdb) interpreter-exec mi "-var-create m * main.main"
^done,name="m",numchild="0",value="{void (void)} 0x8049284 <main.main>",type="void (void)",has_more="0"
(gdb) interpreter-exec mi "-var-info-expression m"
^done,lang="Go",exp="main.main"
           ^^^^

This output looks better.

> Second, the MI docs have a list of languages that can be reported:
> 
>      Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.
> 
> I think this needs to be updated.

It is updated.  Needs a doc review.

-- 
Yao (齐尧)

gdb:

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

	* mi/mi-cmd-var.c: Include "language.h".
	(mi_cmd_var_info_expression): Get language name from
	language_defn.
	* varobj.c (varobj_language_string): Remove.
	(variable_language): Remove declaration.
	(languages): Remove.
	(varobj_get_language): Change the type of return value.
	(variable_language): Remove.
	* varobj.h (enum varobj_languages): Remove.
	(varobj_language_string): Remove declaration.
	(varobj_get_language): Update declaration.

gdb/doc:

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

	* gdb.texinfo (GDB/MI Variable Objects): Update doc about the
	output of "-var-info-expression".
---
 gdb/doc/gdb.texinfo |    3 ++-
 gdb/mi/mi-cmd-var.c |    5 +++--
 gdb/varobj.c        |   43 ++-----------------------------------------
 gdb/varobj.h        |   12 +-----------
 4 files changed, 8 insertions(+), 55 deletions(-)

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 32516ae..75a6641 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -32378,7 +32378,8 @@ For example, if @code{a} is an array, and variable object
 @end smallexample
 
 @noindent
-Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.
+Here, the values of @code{lang} is the language name, which can be
+found in @ref{Supported Languages,,Supported Languages}.
 
 Note that the output of the @code{-var-list-children} command also
 includes those expressions, so the @code{-var-info-expression} command
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 57a2f6b..0a2ef5c 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -24,6 +24,7 @@
 #include "ui-out.h"
 #include "mi-out.h"
 #include "varobj.h"
+#include "language.h"
 #include "value.h"
 #include <ctype.h>
 #include "gdb_string.h"
@@ -479,7 +480,7 @@ void
 mi_cmd_var_info_expression (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
-  enum varobj_languages lang;
+  const struct language_defn *lang;
   struct varobj *var;
 
   if (argc != 1)
@@ -490,7 +491,7 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
 
   lang = varobj_get_language (var);
 
-  ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
+  ui_out_field_string (uiout, "lang", lang->la_natural_name);
   ui_out_field_string (uiout, "exp", varobj_get_expression (var));
 }
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b5cf17d..f15c9de 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -55,9 +55,6 @@ show_varobjdebug (struct ui_file *file, int from_tty,
 char *varobj_format_string[] =
   { "natural", "binary", "decimal", "hexadecimal", "octal" };
 
-/* String representations of gdb's known languages.  */
-char *varobj_language_string[] = { "C", "C++", "Java" };
-
 /* True if we want to allow Python-based pretty-printing.  */
 static int pretty_printing = 0;
 
@@ -199,8 +196,6 @@ static int install_new_value (struct varobj *var, struct value *value,
 
 /* Language-specific routines.  */
 
-static enum varobj_languages variable_language (struct varobj *var);
-
 static int number_of_children (struct varobj *);
 
 static char *name_of_variable (struct varobj *);
@@ -224,14 +219,6 @@ static struct varobj *varobj_add_child (struct varobj *var,
 
 #endif /* HAVE_PYTHON */
 
-/* Array of known source language routines.  */
-static const struct lang_varobj_ops *languages[vlang_end] = {
-  &c_varobj_ops,
-  &cplus_varobj_ops,
-  &java_varobj_ops,
-  &ada_varobj_ops,
-};
-
 /* Private data */
 
 /* Mappings of varobj_display_formats enums to gdb's format codes.  */
@@ -1126,10 +1113,10 @@ varobj_get_path_expr (struct varobj *var)
     }
 }
 
-enum varobj_languages
+const struct language_defn *
 varobj_get_language (struct varobj *var)
 {
-  return variable_language (var);
+  return var->root->exp->language_defn;
 }
 
 int
@@ -2332,32 +2319,6 @@ cppop (struct cpstack **pstack)
 
 /* Common entry points */
 
-/* Get the language of variable VAR.  */
-static enum varobj_languages
-variable_language (struct varobj *var)
-{
-  enum varobj_languages lang;
-
-  switch (var->root->exp->language_defn->la_language)
-    {
-    default:
-    case language_c:
-      lang = vlang_c;
-      break;
-    case language_cplus:
-      lang = vlang_cplus;
-      break;
-    case language_java:
-      lang = vlang_java;
-      break;
-    case language_ada:
-      lang = vlang_ada;
-      break;
-    }
-
-  return lang;
-}
-
 /* Return the number of children for a given variable.
    The result of this function is defined by the language
    implementation.  The number of children returned by this function
diff --git a/gdb/varobj.h b/gdb/varobj.h
index 2379c3d..978d9b9 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -52,16 +52,6 @@ enum varobj_scope_status
 /* String representations of gdb's format codes (defined in varobj.c).  */
 extern char *varobj_format_string[];
 
-/* Languages supported by this variable objects system.  This enum is used
-   to index arrays so we make its first enum explicitly zero.  */
-enum varobj_languages
-  {
-    vlang_c = 0, vlang_cplus, vlang_java, vlang_ada, vlang_end
-  };
-
-/* String representations of gdb's known languages (defined in varobj.c).  */
-extern char *varobj_language_string[];
-
 /* Struct thar describes a variable object instance.  */
 
 struct varobj;
@@ -286,7 +276,7 @@ extern struct type *varobj_get_gdb_type (struct varobj *var);
 
 extern char *varobj_get_path_expr (struct varobj *var);
 
-extern enum varobj_languages varobj_get_language (struct varobj *var);
+extern const struct language_defn *varobj_get_language (struct varobj *var);
 
 extern int varobj_get_attributes (struct varobj *var);
 
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/3] New field 'la_natural_name' in struct language_defn
  2013-10-28 12:50       ` [PATCH 2/3] New field 'la_natural_name' in struct language_defn Yao Qi
  2013-10-28 18:34         ` Tom Tromey
@ 2013-10-29  8:41         ` Yao Qi
  2013-11-07  7:18           ` Yao Qi
  1 sibling, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-29  8:41 UTC (permalink / raw)
  To: gdb-patches

I go through the supported languages in user manual 
https://sourceware.org/gdb/current/onlinedocs/gdb/Supported-Languages.html#Supported-Languages 
and think we should update some of them to be consistent with the doc.

On 10/28/2013 08:48 PM, Yao Qi wrote:
> @@ -978,6 +980,7 @@ const struct language_defn cplus_language_defn =
>   const struct language_defn asm_language_defn =
>   {
>     "asm",			/* Language name */
> +  "ASM",

"assembly" or "Assembly"?

>     language_asm,
>     range_check_off,
>     case_sensitive_on,

> diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
> index faf88d9..1781d37 100644
> --- a/gdb/opencl-lang.c
> +++ b/gdb/opencl-lang.c
> @@ -1103,6 +1103,7 @@ const struct exp_descriptor exp_descriptor_opencl =
>   const struct language_defn opencl_language_defn =
>   {
>     "opencl",			/* Language name */
> +  "OpenCL",

"OpenCL C"

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-29  8:33           ` Yao Qi
@ 2013-10-29 16:49             ` Eli Zaretskii
  2013-10-31  3:10               ` Yao Qi
  2013-11-07  7:23               ` Yao Qi
  0 siblings, 2 replies; 21+ messages in thread
From: Eli Zaretskii @ 2013-10-29 16:49 UTC (permalink / raw)
  To: Yao Qi; +Cc: tromey, gdb-patches

> Date: Tue, 29 Oct 2013 16:31:39 +0800
> From: Yao Qi <yao@codesourcery.com>
> CC: <gdb-patches@sourceware.org>
> 
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -32378,7 +32378,8 @@ For example, if @code{a} is an array, and variable object
>  @end smallexample
>  
>  @noindent
> -Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.
> +Here, the values of @code{lang} is the language name, which can be
             ^^^^^^
"value", in singular.

OK with that change.  Thanks.

> +found in @ref{Supported Languages,,Supported Languages}.

I'm curious: why use the same string twice in @ref?  What did you want
to accomplish?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-29 16:49             ` Eli Zaretskii
@ 2013-10-31  3:10               ` Yao Qi
  2013-10-31 17:31                 ` Eli Zaretskii
  2013-11-07  7:23               ` Yao Qi
  1 sibling, 1 reply; 21+ messages in thread
From: Yao Qi @ 2013-10-31  3:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: tromey, gdb-patches

On 10/30/2013 12:49 AM, Eli Zaretskii wrote:
>> +found in @ref{Supported Languages,,Supported Languages}.
> I'm curious: why use the same string twice in @ref?  What did you want
> to accomplish?

I thought @ref needs three arguments, so I use the same string twice.

Looks @ref{Supported Languages} works as well.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-31  3:10               ` Yao Qi
@ 2013-10-31 17:31                 ` Eli Zaretskii
  0 siblings, 0 replies; 21+ messages in thread
From: Eli Zaretskii @ 2013-10-31 17:31 UTC (permalink / raw)
  To: Yao Qi; +Cc: tromey, gdb-patches

> Date: Thu, 31 Oct 2013 11:08:52 +0800
> From: Yao Qi <yao@codesourcery.com>
> CC: <tromey@redhat.com>, <gdb-patches@sourceware.org>
> 
> On 10/30/2013 12:49 AM, Eli Zaretskii wrote:
> >> +found in @ref{Supported Languages,,Supported Languages}.
> > I'm curious: why use the same string twice in @ref?  What did you want
> > to accomplish?
> 
> I thought @ref needs three arguments, so I use the same string twice.

No, @ref needs only one argument.  What you did has only one use case:
when you want the link display something other than the name of the
pointed-to node.  Then you use the text which you want displayed as
the link.  Of course, that text should be always different from the
node name.

> Looks @ref{Supported Languages} works as well.

I'd be mightily surprised if it didn't ;-)

Thanks.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 2/3] New field 'la_natural_name' in struct language_defn
  2013-10-29  8:41         ` Yao Qi
@ 2013-11-07  7:18           ` Yao Qi
  0 siblings, 0 replies; 21+ messages in thread
From: Yao Qi @ 2013-11-07  7:18 UTC (permalink / raw)
  To: gdb-patches

On 10/29/2013 04:40 PM, Yao Qi wrote:
>> +  "ASM",
> "assembly" or "Assembly"?
> 

IMO, we should use "assembly" to be consistent with the doc.  Patch
below is committed.

-- 
Yao (齐尧)

gdb:

2013-11-07  Yao Qi  <yao@codesourcery.com>

	* language.h (struct language_defn) <la_natural_name>: New field.
	* ada-lang.c (ada_language_defn): Initialize field 'la_natural_name'.
	* c-lang.c (c_language_defn): Likewise.
	(cplus_language_defn, asm_language_defn): Likewise.
	* d-lang.c (d_language_defn): Likewise.
	* f-lang.c (f_language_defn): Likewise.
	* go-lang.c (go_language_defn): Likewise.
	* jv-lang.c (java_language_defn): Likewise.
	* language.c (unknown_language_defn ): Likewise.
	(auto_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.
---
 gdb/ada-lang.c    |    1 +
 gdb/c-lang.c      |    4 ++++
 gdb/d-lang.c      |    1 +
 gdb/f-lang.c      |    1 +
 gdb/go-lang.c     |    1 +
 gdb/jv-lang.c     |    1 +
 gdb/language.c    |    3 +++
 gdb/language.h    |    4 ++++
 gdb/m2-lang.c     |    1 +
 gdb/objc-lang.c   |    1 +
 gdb/opencl-lang.c |    1 +
 gdb/p-lang.c      |    1 +
 12 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 75f9fe8..4b55460 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -12799,6 +12799,7 @@ ada_read_var_value (struct symbol *var, struct frame_info *frame)
 
 const struct language_defn ada_language_defn = {
   "ada",                        /* Language name */
+  "Ada",
   language_ada,
   range_check_off,
   case_sensitive_on,            /* Yes, Ada is case-insensitive, but
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 7c09029..37b423a 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -812,6 +812,7 @@ const struct exp_descriptor exp_descriptor_c =
 const struct language_defn c_language_defn =
 {
   "c",				/* Language name */
+  "C",
   language_c,
   range_check_off,
   case_sensitive_on,
@@ -936,6 +937,7 @@ cplus_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn cplus_language_defn =
 {
   "c++",			/* Language name */
+  "C++",
   language_cplus,
   range_check_off,
   case_sensitive_on,
@@ -978,6 +980,7 @@ const struct language_defn cplus_language_defn =
 const struct language_defn asm_language_defn =
 {
   "asm",			/* Language name */
+  "assembly",
   language_asm,
   range_check_off,
   case_sensitive_on,
@@ -1025,6 +1028,7 @@ const struct language_defn asm_language_defn =
 const struct language_defn minimal_language_defn =
 {
   "minimal",			/* Language name */
+  "Minimal",
   language_minimal,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index b4c8664..3dad91f 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -239,6 +239,7 @@ static const struct op_print d_op_print_tab[] =
 static const struct language_defn d_language_defn =
 {
   "d",
+  "D",
   language_d,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index ee52561..36560ce 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -239,6 +239,7 @@ f_make_symbol_completion_list (const char *text, const char *word,
 const struct language_defn f_language_defn =
 {
   "fortran",
+  "Fortran",
   language_fortran,
   range_check_on,
   case_sensitive_off,
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index fd0bae3..4da1af4 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -561,6 +561,7 @@ go_language_arch_info (struct gdbarch *gdbarch,
 static const struct language_defn go_language_defn =
 {
   "go",
+  "Go",
   language_go,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 9c2cc13..b154d4a 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -1163,6 +1163,7 @@ const struct exp_descriptor exp_descriptor_java =
 const struct language_defn java_language_defn =
 {
   "java",			/* Language name */
+  "Java",
   language_java,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/language.c b/gdb/language.c
index aa708b9..f1232a1 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -792,6 +792,7 @@ unknown_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn unknown_language_defn =
 {
   "unknown",
+  "Unknown",
   language_unknown,
   range_check_off,
   case_sensitive_on,
@@ -836,6 +837,7 @@ const struct language_defn unknown_language_defn =
 const struct language_defn auto_language_defn =
 {
   "auto",
+  "Auto",
   language_auto,
   range_check_off,
   case_sensitive_on,
@@ -878,6 +880,7 @@ const struct language_defn auto_language_defn =
 const struct language_defn local_language_defn =
 {
   "local",
+  "Local",
   language_auto,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/language.h b/gdb/language.h
index 14aedb6..c5f6824 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -134,6 +134,10 @@ struct language_defn
 
     const char *la_name;
 
+    /* Natural or official name of the language.  */
+
+    const char *la_natural_name;
+
     /* its symtab language-enum (defs.h).  */
 
     enum language la_language;
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 158ca07..db2ce7c 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -357,6 +357,7 @@ const struct exp_descriptor exp_descriptor_modula2 =
 const struct language_defn m2_language_defn =
 {
   "modula-2",
+  "Modula-2",
   language_m2,
   range_check_on,
   case_sensitive_on,
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index efec3b3..77a61ac 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -355,6 +355,7 @@ static const struct op_print objc_op_print_tab[] =
 
 const struct language_defn objc_language_defn = {
   "objective-c",		/* Language name */
+  "Objective-C",
   language_objc,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index faf88d9..28a2929 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -1103,6 +1103,7 @@ const struct exp_descriptor exp_descriptor_opencl =
 const struct language_defn opencl_language_defn =
 {
   "opencl",			/* Language name */
+  "OpenCL C",
   language_opencl,
   range_check_off,
   case_sensitive_on,
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index d239190..bc59030 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -416,6 +416,7 @@ pascal_language_arch_info (struct gdbarch *gdbarch,
 const struct language_defn pascal_language_defn =
 {
   "pascal",			/* Language name */
+  "Pascal",
   language_pascal,
   range_check_on,
   case_sensitive_on,
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages
  2013-10-29 16:49             ` Eli Zaretskii
  2013-10-31  3:10               ` Yao Qi
@ 2013-11-07  7:23               ` Yao Qi
  1 sibling, 0 replies; 21+ messages in thread
From: Yao Qi @ 2013-11-07  7:23 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: tromey, gdb-patches

This is what I committed.

-- 
Yao (齐尧)

gdb:

2013-11-07  Yao Qi  <yao@codesourcery.com>

	* mi/mi-cmd-var.c: Include "language.h".
	(mi_cmd_var_info_expression): Get language name from
	language_defn.
	* varobj.c (varobj_language_string): Remove.
	(variable_language): Remove declaration.
	(languages): Remove.
	(varobj_get_language): Change the type of return value.
	(variable_language): Remove.
	* varobj.h (enum varobj_languages): Remove.
	(varobj_language_string): Remove declaration.
	(varobj_get_language): Update declaration.

gdb/doc:

2013-11-07  Yao Qi  <yao@codesourcery.com>

	* gdb.texinfo (GDB/MI Variable Objects): Update doc about the
	output of "-var-info-expression".
---
 gdb/doc/gdb.texinfo |    3 ++-
 gdb/mi/mi-cmd-var.c |    5 +++--
 gdb/varobj.c        |   43 ++-----------------------------------------
 gdb/varobj.h        |   12 +-----------
 4 files changed, 8 insertions(+), 55 deletions(-)

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 28e6ff9..a78b797 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -32400,7 +32400,8 @@ For example, if @code{a} is an array, and variable object
 @end smallexample
 
 @noindent
-Here, the values of @code{lang} can be @code{@{"C" | "C++" | "Java"@}}.
+Here, the value of @code{lang} is the language name, which can be
+found in @ref{Supported Languages}.
 
 Note that the output of the @code{-var-list-children} command also
 includes those expressions, so the @code{-var-info-expression} command
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 57a2f6b..0a2ef5c 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -24,6 +24,7 @@
 #include "ui-out.h"
 #include "mi-out.h"
 #include "varobj.h"
+#include "language.h"
 #include "value.h"
 #include <ctype.h>
 #include "gdb_string.h"
@@ -479,7 +480,7 @@ void
 mi_cmd_var_info_expression (char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
-  enum varobj_languages lang;
+  const struct language_defn *lang;
   struct varobj *var;
 
   if (argc != 1)
@@ -490,7 +491,7 @@ mi_cmd_var_info_expression (char *command, char **argv, int argc)
 
   lang = varobj_get_language (var);
 
-  ui_out_field_string (uiout, "lang", varobj_language_string[(int) lang]);
+  ui_out_field_string (uiout, "lang", lang->la_natural_name);
   ui_out_field_string (uiout, "exp", varobj_get_expression (var));
 }
 
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b5cf17d..f15c9de 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -55,9 +55,6 @@ show_varobjdebug (struct ui_file *file, int from_tty,
 char *varobj_format_string[] =
   { "natural", "binary", "decimal", "hexadecimal", "octal" };
 
-/* String representations of gdb's known languages.  */
-char *varobj_language_string[] = { "C", "C++", "Java" };
-
 /* True if we want to allow Python-based pretty-printing.  */
 static int pretty_printing = 0;
 
@@ -199,8 +196,6 @@ static int install_new_value (struct varobj *var, struct value *value,
 
 /* Language-specific routines.  */
 
-static enum varobj_languages variable_language (struct varobj *var);
-
 static int number_of_children (struct varobj *);
 
 static char *name_of_variable (struct varobj *);
@@ -224,14 +219,6 @@ static struct varobj *varobj_add_child (struct varobj *var,
 
 #endif /* HAVE_PYTHON */
 
-/* Array of known source language routines.  */
-static const struct lang_varobj_ops *languages[vlang_end] = {
-  &c_varobj_ops,
-  &cplus_varobj_ops,
-  &java_varobj_ops,
-  &ada_varobj_ops,
-};
-
 /* Private data */
 
 /* Mappings of varobj_display_formats enums to gdb's format codes.  */
@@ -1126,10 +1113,10 @@ varobj_get_path_expr (struct varobj *var)
     }
 }
 
-enum varobj_languages
+const struct language_defn *
 varobj_get_language (struct varobj *var)
 {
-  return variable_language (var);
+  return var->root->exp->language_defn;
 }
 
 int
@@ -2332,32 +2319,6 @@ cppop (struct cpstack **pstack)
 
 /* Common entry points */
 
-/* Get the language of variable VAR.  */
-static enum varobj_languages
-variable_language (struct varobj *var)
-{
-  enum varobj_languages lang;
-
-  switch (var->root->exp->language_defn->la_language)
-    {
-    default:
-    case language_c:
-      lang = vlang_c;
-      break;
-    case language_cplus:
-      lang = vlang_cplus;
-      break;
-    case language_java:
-      lang = vlang_java;
-      break;
-    case language_ada:
-      lang = vlang_ada;
-      break;
-    }
-
-  return lang;
-}
-
 /* Return the number of children for a given variable.
    The result of this function is defined by the language
    implementation.  The number of children returned by this function
diff --git a/gdb/varobj.h b/gdb/varobj.h
index 2379c3d..978d9b9 100644
--- a/gdb/varobj.h
+++ b/gdb/varobj.h
@@ -52,16 +52,6 @@ enum varobj_scope_status
 /* String representations of gdb's format codes (defined in varobj.c).  */
 extern char *varobj_format_string[];
 
-/* Languages supported by this variable objects system.  This enum is used
-   to index arrays so we make its first enum explicitly zero.  */
-enum varobj_languages
-  {
-    vlang_c = 0, vlang_cplus, vlang_java, vlang_ada, vlang_end
-  };
-
-/* String representations of gdb's known languages (defined in varobj.c).  */
-extern char *varobj_language_string[];
-
 /* Struct thar describes a variable object instance.  */
 
 struct varobj;
@@ -286,7 +276,7 @@ extern struct type *varobj_get_gdb_type (struct varobj *var);
 
 extern char *varobj_get_path_expr (struct varobj *var);
 
-extern enum varobj_languages varobj_get_language (struct varobj *var);
+extern const struct language_defn *varobj_get_language (struct varobj *var);
 
 extern int varobj_get_attributes (struct varobj *var);
 
-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2013-11-07  7:18 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-18  0:54 [PATCH 1/2] New field la_varobj_ops in struct language_defn Yao Qi
2013-10-18  0:54 ` [PATCH 2/2] Remove varobj_language_string, languages and varobj_languages Yao Qi
2013-10-25  4:15   ` Joel Brobecker
2013-10-25 13:38     ` Yao Qi
2013-10-26  4:09       ` Joel Brobecker
2013-10-28 12:50     ` [PATCH 1/3] Constify 'la_name' in struct language_defn Yao Qi
2013-10-28 12:50       ` [PATCH 3/3] Remove varobj_language_string, languages and varobj_languages Yao Qi
2013-10-28 18:52         ` Tom Tromey
2013-10-29  8:33           ` Yao Qi
2013-10-29 16:49             ` Eli Zaretskii
2013-10-31  3:10               ` Yao Qi
2013-10-31 17:31                 ` Eli Zaretskii
2013-11-07  7:23               ` Yao Qi
2013-10-28 12:50       ` [PATCH 2/3] New field 'la_natural_name' in struct language_defn Yao Qi
2013-10-28 18:34         ` Tom Tromey
2013-10-29  8:41         ` Yao Qi
2013-11-07  7:18           ` Yao Qi
2013-10-28 15:02       ` [PATCH 1/3] Constify 'la_name' " Tom Tromey
2013-10-25  3:34 ` [PATCH 1/2] New field la_varobj_ops " Joel Brobecker
2013-10-25 13:16   ` Yao Qi
2013-10-27 12:04   ` Rename field 'lang' to 'lang_ops' ([PATCH 1/2] New field la_varobj_ops in struct language_defn) Yao Qi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).