summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog29
-rw-r--r--gdb/ada-lang.c1
-rw-r--r--gdb/c-lang.c4
-rw-r--r--gdb/c-lang.h2
-rw-r--r--gdb/c-typeprint.c18
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdbint.texinfo17
-rw-r--r--gdb/f-lang.c1
-rw-r--r--gdb/jv-lang.c1
-rw-r--r--gdb/language.c3
-rw-r--r--gdb/language.h22
-rw-r--r--gdb/m2-lang.c1
-rw-r--r--gdb/m2-lang.h3
-rw-r--r--gdb/m2-typeprint.c20
-rw-r--r--gdb/objc-lang.c1
-rw-r--r--gdb/p-lang.c1
-rw-r--r--gdb/p-lang.h3
-rw-r--r--gdb/p-typeprint.c15
-rw-r--r--gdb/scm-lang.c1
-rw-r--r--gdb/typeprint.c46
20 files changed, 134 insertions, 60 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 749e65f9529..667d6be27ae 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,34 @@
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.
(copy_exp): Likewise.
(push_expression_name): Likewise.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 7176561115d..d4d7dc03527 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -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 */
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index ebe781b3796..a9cd9c2970e 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -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 */
diff --git a/gdb/c-lang.h b/gdb/c-lang.h
index 58d99ce5478..fe1939accc3 100644
--- a/gdb/c-lang.h
+++ b/gdb/c-lang.h
@@ -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);
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 56d12f96ee5..31a98ea5eaa 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -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:
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index c11cb92f96d..b75da649b5a 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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.
diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo
index 63b0d34de3c..1edb444a4c9 100644
--- a/gdb/doc/gdbint.texinfo
+++ b/gdb/doc/gdbint.texinfo
@@ -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
diff --git a/gdb/f-lang.c b/gdb/f-lang.c
index 8ae7775ad42..4e2f3c44ecd 100644
--- a/gdb/f-lang.c
+++ b/gdb/f-lang.c
@@ -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 */
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 39d8f4821e0..69570b43bb4 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -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 */
diff --git a/gdb/language.c b/gdb/language.c
index 7b0b44a6b1b..0b21dc3ccc2 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -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 */
diff --git a/gdb/language.h b/gdb/language.h
index 04d4da2604b..ba28540b564 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -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) */
diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index 8bc0ce79523..2b3ca6ab47a 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -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 */
diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h
index ac7c8f5ad05..8ce458c3d49 100644
--- a/gdb/m2-lang.h
+++ b/gdb/m2-lang.h
@@ -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);
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 666ae286677..e2970e2a4e2 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -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
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 1692c3d3398..46081688264 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -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 */
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index b763e04900d..b829f8d4aad 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -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 */
diff --git a/gdb/p-lang.h b/gdb/p-lang.h
index b840041a865..a4f878f8b95 100644
--- a/gdb/p-lang.h
+++ b/gdb/p-lang.h
@@ -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);
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c
index a10982d773b..afc831cc484 100644
--- a/gdb/p-typeprint.c
+++ b/gdb/p-typeprint.c
@@ -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:
diff --git a/gdb/scm-lang.c b/gdb/scm-lang.c
index 003e27a7376..607efb6e5d1 100644
--- a/gdb/scm-lang.c
+++ b/gdb/scm-lang.c
@@ -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 */
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
index 0ec0e267a8b..44f1a77e12b 100644
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
@@ -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