gdb
authorTom Tromey <tromey@redhat.com>
Sat, 27 Sep 2008 21:29:30 +0000 (21:29 +0000)
committerTom Tromey <tromey@redhat.com>
Sat, 27 Sep 2008 21:29:30 +0000 (21:29 +0000)
* scm-lang.c (scm_language_defn): Update.
* p-typeprint.c (pascal_print_typedef): New function.
* p-lang.h: (pascal_print_typedef): Declare.
* p-lang.c (pascal_language_defn): Update.
* objc-lang.c (objc_language_defn): Update.
* m2-typeprint.c (m2_print_typedef): New function.
* m2-lang.h (m2_print_typedef): Declare.
* m2-lang.c (m2_language_defn): Update.
* language.h (_LANG_c, _LANG_m2, _LANG_fortran, _LANG_pascal):
Remove.
(struct language_defn) <la_print_typedef>: New field.
(default_print_typedef): Declare.
(LA_PRINT_TYPEDEF): New define.
* language.c (unknown_language_defn): Update.
(auto_language_defn): Update.
(local_language_defn): Update.
* jv-lang.c (java_language_defn): Update.
* f-lang.c (f_language_defn): Update.
* c-typeprint.c (c_print_typedef): New function.
* c-lang.h (c_print_typedef): Declare.
* c-lang.c (c_language_defn): Update.
(cplus_language_defn): Update.
(asm_language_defn): Update.
(minimal_language_defn): Update.
* ada-lang.c (ada_language_defn): Update.
* typeprint.c (default_print_typedef): New function.
gdb/doc
* gdbint.texinfo (Language Support): Remove text about omitting
support for a language.

20 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.c
gdb/c-lang.h
gdb/c-typeprint.c
gdb/doc/ChangeLog
gdb/doc/gdbint.texinfo
gdb/f-lang.c
gdb/jv-lang.c
gdb/language.c
gdb/language.h
gdb/m2-lang.c
gdb/m2-lang.h
gdb/m2-typeprint.c
gdb/objc-lang.c
gdb/p-lang.c
gdb/p-lang.h
gdb/p-typeprint.c
gdb/scm-lang.c
gdb/typeprint.c

index 749e65f95297eb31a96f19c4d8386633d6edb295..667d6be27ae013df8170bda51a3d9987a33b4500 100644 (file)
@@ -1,3 +1,32 @@
+2008-09-27  Tom Tromey  <tromey@redhat.com>
+
+       * scm-lang.c (scm_language_defn): Update.
+       * p-typeprint.c (pascal_print_typedef): New function.
+       * p-lang.h: (pascal_print_typedef): Declare.
+       * p-lang.c (pascal_language_defn): Update.
+       * objc-lang.c (objc_language_defn): Update.
+       * m2-typeprint.c (m2_print_typedef): New function.
+       * m2-lang.h (m2_print_typedef): Declare.
+       * m2-lang.c (m2_language_defn): Update.
+       * language.h (_LANG_c, _LANG_m2, _LANG_fortran, _LANG_pascal):
+       Remove.
+       (struct language_defn) <la_print_typedef>: New field.
+       (default_print_typedef): Declare.
+       (LA_PRINT_TYPEDEF): New define.
+       * language.c (unknown_language_defn): Update.
+       (auto_language_defn): Update.
+       (local_language_defn): Update.
+       * jv-lang.c (java_language_defn): Update.
+       * f-lang.c (f_language_defn): Update.
+       * c-typeprint.c (c_print_typedef): New function.
+       * c-lang.h (c_print_typedef): Declare.
+       * c-lang.c (c_language_defn): Update.
+       (cplus_language_defn): Update.
+       (asm_language_defn): Update.
+       (minimal_language_defn): Update.
+       * ada-lang.c (ada_language_defn): Update.
+       * typeprint.c (default_print_typedef): New function.
+
 2008-09-27  Tom Tromey  <tromey@redhat.com>
 
        * jv-exp.y (insert_exp): Define using ISO syntax.
index 7176561115de74004ca44658843e108d7e9d40b8..d4d7dc0352765e1a523bb671fca5a73fa4d23b5c 100644 (file)
@@ -10943,6 +10943,7 @@ const struct language_defn ada_language_defn = {
   ada_printstr,                 /* Function to print string constant */
   emit_char,                    /* Function to print single char (not used) */
   ada_print_type,               /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   ada_val_print,                /* Print a value using appropriate syntax */
   ada_value_print,              /* Print a top-level value */
   NULL,                         /* Language specific skip_trampoline */
index ebe781b3796297d7261149b65af8a3530022a10d..a9cd9c2970ee944e0a4fb26d7385e0930ff2c1bc 100644 (file)
@@ -400,6 +400,7 @@ const struct language_defn c_language_defn =
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
   c_print_type,                        /* Print a type using appropriate syntax */
+  c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
@@ -516,6 +517,7 @@ const struct language_defn cplus_language_defn =
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
   c_print_type,                        /* Print a type using appropriate syntax */
+  c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   cplus_skip_trampoline,       /* Language specific skip_trampoline */
@@ -551,6 +553,7 @@ const struct language_defn asm_language_defn =
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
   c_print_type,                        /* Print a type using appropriate syntax */
+  c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
@@ -591,6 +594,7 @@ const struct language_defn minimal_language_defn =
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
   c_print_type,                        /* Print a type using appropriate syntax */
+  c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
index 58d99ce54785aec0a3d373c9f13b29420f542aa7..fe1939accc33e86eba7140092af7aa272153f3e9 100644 (file)
@@ -37,6 +37,8 @@ extern void c_error (char *); /* Defined in c-exp.y */
 extern void c_print_type (struct type *, char *, struct ui_file *, int,
                          int);
 
+extern void c_print_typedef (struct type *, struct symbol *, struct ui_file *);
+
 extern int c_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
                        struct ui_file *, int, int, int,
                        enum val_prettyprint);
index 56d12f96ee50236ca3d60d567a1f7d45d2afeef6..31a98ea5eaa829788ade2e3b8c79cd3186a82342 100644 (file)
@@ -97,6 +97,24 @@ c_print_type (struct type *type, char *varstring, struct ui_file *stream,
     }
 }
 
+/* Print a typedef using C syntax.  TYPE is the underlying type.
+   NEW_SYMBOL is the symbol naming the type.  STREAM is the stream on
+   which to print.  */
+
+void
+c_print_typedef (struct type *type, struct symbol *new_symbol,
+                struct ui_file *stream)
+{
+  CHECK_TYPEDEF (type);
+  fprintf_filtered (stream, "typedef ");
+  type_print (type, "", stream, 0);
+  if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
+      || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
+                SYMBOL_LINKAGE_NAME (new_symbol)) != 0)
+    fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new_symbol));
+  fprintf_filtered (stream, ";\n");
+}
+
 /* If TYPE is a derived type, then print out derivation information.
    Print only the actual base classes of this type, not the base classes
    of the base classes.  I.E.  for the derivation hierarchy:
index c11cb92f96dc55c81626e45305d891a1255b751d..b75da649b5a5dd2773e100507b3d45fec7d9840b 100644 (file)
@@ -1,3 +1,8 @@
+2008-09-27  Tom Tromey  <tromey@redhat.com>
+
+       * gdbint.texinfo (Language Support): Remove text about omitting
+       support for a language.
+
 2008-09-23  Doug Evans  <dje@google.com>
 
        * gdb.texinfo (info dcache): Update.
index 63b0d34de3cb65d80fa56234ebc85db8b3d71970..1edb444a4c9e2b7a1890c55387991f9a01f2e064 100644 (file)
@@ -2513,23 +2513,6 @@ printed representations of your operators to @code{op_print_tab}.
 Add a call to @code{@var{lang}_parse()} and @code{@var{lang}_error} in
 @code{parse_exp_1} (defined in @file{parse.c}).
 
-@item Use macros to trim code
-
-@cindex trimming language-dependent code
-The user has the option of building @value{GDBN} for some or all of the
-languages.  If the user decides to build @value{GDBN} for the language
-@var{lang}, then every file dependent on @file{language.h} will have the
-macro @code{_LANG_@var{lang}} defined in it.  Use @code{#ifdef}s to
-leave out large routines that the user won't need if he or she is not
-using your language.
-
-Note that you do not need to do this in your YACC parser, since if @value{GDBN}
-is not build for @var{lang}, then @file{@var{lang}-exp.tab.o} (the
-compiled form of your parser) is not linked into @value{GDBN} at all.
-
-See the file @file{configure.in} for how @value{GDBN} is configured
-for different languages.
-
 @item Edit @file{Makefile.in}
 
 Add dependencies in @file{Makefile.in}.  Make sure you update the macro
index 8ae7775ad42536cb8bd720764330d9f26be547ec..4e2f3c44ecd2e3ddd0c3e87ecdca9e3d97613a1d 100644 (file)
@@ -324,6 +324,7 @@ const struct language_defn f_language_defn =
   f_printstr,                  /* function to print string constant */
   f_emit_char,                 /* Function to print a single character */
   f_print_type,                        /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   f_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* FIXME */
   NULL,                                /* Language specific skip_trampoline */
index 39d8f4821e014f94387b43c67fe4e297c4d84ba0..69570b43bb41f49bc68eb577fc9a83da8bec0f64 100644 (file)
@@ -1110,6 +1110,7 @@ const struct language_defn java_language_defn =
   c_printstr,                  /* Function to print string constant */
   java_emit_char,              /* Function to print a single character */
   java_print_type,             /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   java_val_print,              /* Print a value using appropriate syntax */
   java_value_print,            /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
index 7b0b44a6b1b19eba2936e31cec4a1491c64263b2..0b21dc3ccc207a55cc0bb2e03d597b6048053813 100644 (file)
@@ -1145,6 +1145,7 @@ const struct language_defn unknown_language_defn =
   unk_lang_printstr,
   unk_lang_emit_char,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
@@ -1181,6 +1182,7 @@ const struct language_defn auto_language_defn =
   unk_lang_printstr,
   unk_lang_emit_char,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
@@ -1216,6 +1218,7 @@ const struct language_defn local_language_defn =
   unk_lang_printstr,
   unk_lang_emit_char,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
index 04d4da2604bcf2d37a167b43dca40155541bdaa8..ba28540b564ea612e05458cc20a7bfba5d755462 100644 (file)
@@ -31,14 +31,6 @@ struct frame_info;
 struct expression;
 struct ui_file;
 
-/* This used to be included to configure GDB for one or more specific
-   languages.  Now it is left out to configure for all of them.  FIXME.  */
-/* #include "lang_def.h" */
-#define        _LANG_c
-#define        _LANG_m2
-#define  _LANG_fortran
-#define  _LANG_pascal
-
 #define MAX_FORTRAN_DIMS  7    /* Maximum number of F77 array dims */
 
 /* range_mode ==
@@ -192,6 +184,13 @@ struct language_defn
     void (*la_print_type) (struct type *, char *, struct ui_file *, int,
                           int);
 
+    /* Print a typedef using syntax appropriate for this language.
+       TYPE is the underlying type.  NEW_SYMBOL is the symbol naming
+       the type.  STREAM is the output stream on which to print.  */
+
+    void (*la_print_typedef) (struct type *type, struct symbol *new_symbol,
+                             struct ui_file *stream);
+
     /* Print a value using syntax appropriate for this language. */
 
     int (*la_val_print) (struct type *, const gdb_byte *, int, CORE_ADDR,
@@ -350,6 +349,9 @@ extern enum language set_language (enum language);
 #define LA_PRINT_TYPE(type,varstring,stream,show,level) \
   (current_language->la_print_type(type,varstring,stream,show,level))
 
+#define LA_PRINT_TYPEDEF(type,new_symbol,stream) \
+  (current_language->la_print_typedef(type,new_symbol,stream))
+
 #define LA_VAL_PRINT(type,valaddr,offset,addr,stream,fmt,deref,recurse,pretty) \
   (current_language->la_val_print(type,valaddr,offset,addr,stream,fmt,deref, \
                                  recurse,pretty))
@@ -468,4 +470,8 @@ int language_pass_by_reference (struct type *type);
    independent of this.  */
 int default_pass_by_reference (struct type *type);
 
+/* The default implementation of la_print_typedef.  */
+void default_print_typedef (struct type *type, struct symbol *new_symbol,
+                           struct ui_file *stream);
+
 #endif /* defined (LANGUAGE_H) */
index 8bc0ce795230fdfc40c4674dddd5722d883f9c2f..2b3ca6ab47a2aa784ea1a9fba3caa347735420d6 100644 (file)
@@ -375,6 +375,7 @@ const struct language_defn m2_language_defn =
   m2_printstr,                 /* function to print string constant */
   m2_emit_char,                        /* Function to print a single character */
   m2_print_type,               /* Print a type using appropriate syntax */
+  m2_print_typedef,            /* Print a typedef using appropriate syntax */
   m2_val_print,                        /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
index ac7c8f5ad05c236836c443ac91e2820cdba8eebc..8ce458c3d497f888a8bac0d84b5a50452f4ffa33 100644 (file)
@@ -26,6 +26,9 @@ extern void m2_error (char *);        /* Defined in m2-exp.y */
 extern void m2_print_type (struct type *, char *, struct ui_file *, int,
                           int);
 
+extern void m2_print_typedef (struct type *, struct symbol *,
+                             struct ui_file *);
+
 extern int m2_is_long_set (struct type *type);
 extern int m2_is_unbounded_array (struct type *type);
 
index 666ae286677ba649dff850741b2bb2f3d9076f62..e2970e2a4e24423f00dffece73afa91ce050bb16 100644 (file)
@@ -154,6 +154,26 @@ m2_print_type (struct type *type, char *varstring, struct ui_file *stream,
     }
 }
 
+/* Print a typedef using M2 syntax.  TYPE is the underlying type.
+   NEW_SYMBOL is the symbol naming the type.  STREAM is the stream on
+   which to print.  */
+
+void
+m2_print_typedef (struct type *type, struct symbol *new_symbol,
+                 struct ui_file *stream)
+{
+  CHECK_TYPEDEF (type);
+  fprintf_filtered (stream, "TYPE ");
+  if (!TYPE_NAME (SYMBOL_TYPE (new_symbol))
+      || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
+                SYMBOL_LINKAGE_NAME (new_symbol)) != 0)
+    fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new_symbol));
+  else
+    fprintf_filtered (stream, "<builtin> = ");
+  type_print (type, "", stream, 0);
+  fprintf_filtered (stream, ";\n");
+}
+
 /* m2_type_name - if a, type, has a name then print it.  */
 
 void
index 1692c3d3398ee8c68b37b8da084c6e489348aafb..46081688264a6f811d6027a1ee2b75890a7f7f03 100644 (file)
@@ -512,6 +512,7 @@ const struct language_defn objc_language_defn = {
   objc_printstr,               /* Function to print string constant */
   objc_emit_char,
   c_print_type,                        /* Print a type using appropriate syntax */
+  c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_val_print,                 /* Print a value using appropriate syntax */
   c_value_print,               /* Print a top-level value */
   objc_skip_trampoline,        /* Language specific skip_trampoline */
index b763e04900dbab53e825732a3f46a115a19981ce..b829f8d4aad1302572f6b2d453b0df572b6fba51 100644 (file)
@@ -414,6 +414,7 @@ const struct language_defn pascal_language_defn =
   pascal_printstr,             /* Function to print string constant */
   pascal_emit_char,            /* Print a single char */
   pascal_print_type,           /* Print a type using appropriate syntax */
+  pascal_print_typedef,                /* Print a typedef using appropriate syntax */
   pascal_val_print,            /* Print a value using appropriate syntax */
   pascal_value_print,          /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
index b840041a865e37aec062d694a590f1917a9a5755..a4f878f8b95a868ff034d41a1a1db73a4f47d4e4 100644 (file)
@@ -31,6 +31,9 @@ extern void pascal_error (char *);    /* Defined in p-exp.y */
 /* Defined in p-typeprint.c */
 extern void pascal_print_type (struct type *, char *, struct ui_file *, int, int);
 
+extern void pascal_print_typedef (struct type *, struct symbol *,
+                                 struct ui_file *);
+
 extern int pascal_val_print (struct type *, const gdb_byte *, int,
                             CORE_ADDR, struct ui_file *, int, int,
                             int, enum val_prettyprint);
index a10982d773bbdaa6e67542d738a1bb8ab47b7ed4..afc831cc4849a00e6f6ae438a231d1298fbfdd8c 100644 (file)
@@ -87,6 +87,21 @@ pascal_print_type (struct type *type, char *varstring, struct ui_file *stream,
 
 }
 
+/* Print a typedef using Pascal syntax.  TYPE is the underlying type.
+   NEW_SYMBOL is the symbol naming the type.  STREAM is the stream on
+   which to print.  */
+
+void
+pascal_print_typedef (struct type *type, struct symbol *new_symbol,
+                     struct ui_file *stream)
+{
+  CHECK_TYPEDEF (type);
+  fprintf_filtered (stream, "type ");
+  fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new_symbol));
+  type_print (type, "", stream, 0);
+  fprintf_filtered (stream, ";\n");
+}
+
 /* If TYPE is a derived type, then print out derivation information.
    Print only the actual base classes of this type, not the base classes
    of the base classes.  I.E.  for the derivation hierarchy:
index 003e27a7376f577f0bb1717216e860ac20103251..607efb6e5d1f29e8a19860a57f251f1813ca339f 100644 (file)
@@ -254,6 +254,7 @@ const struct language_defn scm_language_defn =
   scm_printstr,                        /* Function to print string constant */
   NULL,                                /* Function to print a single character */
   c_print_type,                        /* Print a type using appropriate syntax */
+  default_print_typedef,       /* Print a typedef using appropriate syntax */
   scm_val_print,               /* Print a value using appropriate syntax */
   scm_value_print,             /* Print a top-level value */
   NULL,                                /* Language specific skip_trampoline */
index 0ec0e267a8b68dd383b5c0ffef120c0495be6893..44f1a77e12b982193a873ea3e08baa6ed49a0972 100644 (file)
@@ -47,6 +47,7 @@ static void whatis_command (char *, int);
 
 static void whatis_exp (char *, int);
 
+
 /* Print a description of a type in the format of a 
    typedef for the current language.
    NEW is the new name for a type TYPE. */
@@ -54,41 +55,16 @@ static void whatis_exp (char *, int);
 void
 typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
 {
-  CHECK_TYPEDEF (type);
-  switch (current_language->la_language)
-    {
-#ifdef _LANG_c
-    case language_c:
-    case language_cplus:
-      fprintf_filtered (stream, "typedef ");
-      type_print (type, "", stream, 0);
-      if (TYPE_NAME ((SYMBOL_TYPE (new))) == 0
-         || strcmp (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_LINKAGE_NAME (new)) != 0)
-       fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new));
-      break;
-#endif
-#ifdef _LANG_m2
-    case language_m2:
-      fprintf_filtered (stream, "TYPE ");
-      if (!TYPE_NAME (SYMBOL_TYPE (new))
-         || strcmp (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_LINKAGE_NAME (new)) != 0)
-       fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new));
-      else
-       fprintf_filtered (stream, "<builtin> = ");
-      type_print (type, "", stream, 0);
-      break;
-#endif
-#ifdef _LANG_pascal
-    case language_pascal:
-      fprintf_filtered (stream, "type ");
-      fprintf_filtered (stream, "%s = ", SYMBOL_PRINT_NAME (new));
-      type_print (type, "", stream, 0);
-      break;
-#endif
-    default:
-      error (_("Language not supported."));
-    }
-  fprintf_filtered (stream, ";\n");
+  LA_PRINT_TYPEDEF (type, new, stream);
+}
+
+/* The default way to print a typedef.  */
+
+void
+default_print_typedef (struct type *type, struct symbol *new_symbol,
+                      struct ui_file *stream)
+{
+  error (_("Language not supported."));
 }
 
 /* Print a description of a type TYPE in the form of a declaration of a