gdb
* 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.
This commit is contained in:
parent
09be204ecc
commit
5c6ce71d76
20 changed files with 134 additions and 60 deletions
|
@ -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>
|
2008-09-27 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* jv-exp.y (insert_exp): Define using ISO syntax.
|
* jv-exp.y (insert_exp): Define using ISO syntax.
|
||||||
|
|
|
@ -10943,6 +10943,7 @@ const struct language_defn ada_language_defn = {
|
||||||
ada_printstr, /* Function to print string constant */
|
ada_printstr, /* Function to print string constant */
|
||||||
emit_char, /* Function to print single char (not used) */
|
emit_char, /* Function to print single char (not used) */
|
||||||
ada_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
ada_value_print, /* Print a top-level value */
|
ada_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -400,6 +400,7 @@ const struct language_defn c_language_defn =
|
||||||
c_printstr, /* Function to print string constant */
|
c_printstr, /* Function to print string constant */
|
||||||
c_emit_char, /* Print a single char */
|
c_emit_char, /* Print a single char */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
@ -516,6 +517,7 @@ const struct language_defn cplus_language_defn =
|
||||||
c_printstr, /* Function to print string constant */
|
c_printstr, /* Function to print string constant */
|
||||||
c_emit_char, /* Print a single char */
|
c_emit_char, /* Print a single char */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
cplus_skip_trampoline, /* Language specific skip_trampoline */
|
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_printstr, /* Function to print string constant */
|
||||||
c_emit_char, /* Print a single char */
|
c_emit_char, /* Print a single char */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
@ -591,6 +594,7 @@ const struct language_defn minimal_language_defn =
|
||||||
c_printstr, /* Function to print string constant */
|
c_printstr, /* Function to print string constant */
|
||||||
c_emit_char, /* Print a single char */
|
c_emit_char, /* Print a single char */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -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,
|
extern void c_print_type (struct type *, char *, struct ui_file *, int,
|
||||||
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,
|
extern int c_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
|
||||||
struct ui_file *, int, int, int,
|
struct ui_file *, int, int, int,
|
||||||
enum val_prettyprint);
|
enum val_prettyprint);
|
||||||
|
|
|
@ -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.
|
/* If TYPE is a derived type, then print out derivation information.
|
||||||
Print only the actual base classes of this type, not the base classes
|
Print only the actual base classes of this type, not the base classes
|
||||||
of the base classes. I.E. for the derivation hierarchy:
|
of the base classes. I.E. for the derivation hierarchy:
|
||||||
|
|
|
@ -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>
|
2008-09-23 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* gdb.texinfo (info dcache): Update.
|
* gdb.texinfo (info dcache): Update.
|
||||||
|
|
|
@ -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
|
Add a call to @code{@var{lang}_parse()} and @code{@var{lang}_error} in
|
||||||
@code{parse_exp_1} (defined in @file{parse.c}).
|
@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}
|
@item Edit @file{Makefile.in}
|
||||||
|
|
||||||
Add dependencies in @file{Makefile.in}. Make sure you update the macro
|
Add dependencies in @file{Makefile.in}. Make sure you update the macro
|
||||||
|
|
|
@ -324,6 +324,7 @@ const struct language_defn f_language_defn =
|
||||||
f_printstr, /* function to print string constant */
|
f_printstr, /* function to print string constant */
|
||||||
f_emit_char, /* Function to print a single character */
|
f_emit_char, /* Function to print a single character */
|
||||||
f_print_type, /* Print a type using appropriate syntax */
|
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 */
|
f_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* FIXME */
|
c_value_print, /* FIXME */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -1110,6 +1110,7 @@ const struct language_defn java_language_defn =
|
||||||
c_printstr, /* Function to print string constant */
|
c_printstr, /* Function to print string constant */
|
||||||
java_emit_char, /* Function to print a single character */
|
java_emit_char, /* Function to print a single character */
|
||||||
java_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
java_value_print, /* Print a top-level value */
|
java_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -1145,6 +1145,7 @@ const struct language_defn unknown_language_defn =
|
||||||
unk_lang_printstr,
|
unk_lang_printstr,
|
||||||
unk_lang_emit_char,
|
unk_lang_emit_char,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
unk_lang_value_print, /* Print a top-level value */
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
unk_lang_trampoline, /* Language specific skip_trampoline */
|
unk_lang_trampoline, /* Language specific skip_trampoline */
|
||||||
|
@ -1181,6 +1182,7 @@ const struct language_defn auto_language_defn =
|
||||||
unk_lang_printstr,
|
unk_lang_printstr,
|
||||||
unk_lang_emit_char,
|
unk_lang_emit_char,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
unk_lang_value_print, /* Print a top-level value */
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
unk_lang_trampoline, /* Language specific skip_trampoline */
|
unk_lang_trampoline, /* Language specific skip_trampoline */
|
||||||
|
@ -1216,6 +1218,7 @@ const struct language_defn local_language_defn =
|
||||||
unk_lang_printstr,
|
unk_lang_printstr,
|
||||||
unk_lang_emit_char,
|
unk_lang_emit_char,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
unk_lang_value_print, /* Print a top-level value */
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
unk_lang_trampoline, /* Language specific skip_trampoline */
|
unk_lang_trampoline, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -31,14 +31,6 @@ struct frame_info;
|
||||||
struct expression;
|
struct expression;
|
||||||
struct ui_file;
|
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 */
|
#define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims */
|
||||||
|
|
||||||
/* range_mode ==
|
/* range_mode ==
|
||||||
|
@ -192,6 +184,13 @@ struct language_defn
|
||||||
void (*la_print_type) (struct type *, char *, struct ui_file *, int,
|
void (*la_print_type) (struct type *, char *, struct ui_file *, int,
|
||||||
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. */
|
/* Print a value using syntax appropriate for this language. */
|
||||||
|
|
||||||
int (*la_val_print) (struct type *, const gdb_byte *, int, CORE_ADDR,
|
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) \
|
#define LA_PRINT_TYPE(type,varstring,stream,show,level) \
|
||||||
(current_language->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) \
|
#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, \
|
(current_language->la_val_print(type,valaddr,offset,addr,stream,fmt,deref, \
|
||||||
recurse,pretty))
|
recurse,pretty))
|
||||||
|
@ -468,4 +470,8 @@ int language_pass_by_reference (struct type *type);
|
||||||
independent of this. */
|
independent of this. */
|
||||||
int default_pass_by_reference (struct type *type);
|
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) */
|
#endif /* defined (LANGUAGE_H) */
|
||||||
|
|
|
@ -375,6 +375,7 @@ const struct language_defn m2_language_defn =
|
||||||
m2_printstr, /* function to print string constant */
|
m2_printstr, /* function to print string constant */
|
||||||
m2_emit_char, /* Function to print a single character */
|
m2_emit_char, /* Function to print a single character */
|
||||||
m2_print_type, /* Print a type using appropriate syntax */
|
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 */
|
m2_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -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,
|
extern void m2_print_type (struct type *, char *, struct ui_file *, int,
|
||||||
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_long_set (struct type *type);
|
||||||
extern int m2_is_unbounded_array (struct type *type);
|
extern int m2_is_unbounded_array (struct type *type);
|
||||||
|
|
||||||
|
|
|
@ -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. */
|
/* m2_type_name - if a, type, has a name then print it. */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -512,6 +512,7 @@ const struct language_defn objc_language_defn = {
|
||||||
objc_printstr, /* Function to print string constant */
|
objc_printstr, /* Function to print string constant */
|
||||||
objc_emit_char,
|
objc_emit_char,
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
c_value_print, /* Print a top-level value */
|
c_value_print, /* Print a top-level value */
|
||||||
objc_skip_trampoline, /* Language specific skip_trampoline */
|
objc_skip_trampoline, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -414,6 +414,7 @@ const struct language_defn pascal_language_defn =
|
||||||
pascal_printstr, /* Function to print string constant */
|
pascal_printstr, /* Function to print string constant */
|
||||||
pascal_emit_char, /* Print a single char */
|
pascal_emit_char, /* Print a single char */
|
||||||
pascal_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
pascal_value_print, /* Print a top-level value */
|
pascal_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -31,6 +31,9 @@ extern void pascal_error (char *); /* Defined in p-exp.y */
|
||||||
/* Defined in p-typeprint.c */
|
/* Defined in p-typeprint.c */
|
||||||
extern void pascal_print_type (struct type *, char *, struct ui_file *, int, int);
|
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,
|
extern int pascal_val_print (struct type *, const gdb_byte *, int,
|
||||||
CORE_ADDR, struct ui_file *, int, int,
|
CORE_ADDR, struct ui_file *, int, int,
|
||||||
int, enum val_prettyprint);
|
int, enum val_prettyprint);
|
||||||
|
|
|
@ -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.
|
/* If TYPE is a derived type, then print out derivation information.
|
||||||
Print only the actual base classes of this type, not the base classes
|
Print only the actual base classes of this type, not the base classes
|
||||||
of the base classes. I.E. for the derivation hierarchy:
|
of the base classes. I.E. for the derivation hierarchy:
|
||||||
|
|
|
@ -254,6 +254,7 @@ const struct language_defn scm_language_defn =
|
||||||
scm_printstr, /* Function to print string constant */
|
scm_printstr, /* Function to print string constant */
|
||||||
NULL, /* Function to print a single character */
|
NULL, /* Function to print a single character */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
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_val_print, /* Print a value using appropriate syntax */
|
||||||
scm_value_print, /* Print a top-level value */
|
scm_value_print, /* Print a top-level value */
|
||||||
NULL, /* Language specific skip_trampoline */
|
NULL, /* Language specific skip_trampoline */
|
||||||
|
|
|
@ -47,6 +47,7 @@ static void whatis_command (char *, int);
|
||||||
|
|
||||||
static void whatis_exp (char *, int);
|
static void whatis_exp (char *, int);
|
||||||
|
|
||||||
|
|
||||||
/* Print a description of a type in the format of a
|
/* Print a description of a type in the format of a
|
||||||
typedef for the current language.
|
typedef for the current language.
|
||||||
NEW is the new name for a type TYPE. */
|
NEW is the new name for a type TYPE. */
|
||||||
|
@ -54,41 +55,16 @@ static void whatis_exp (char *, int);
|
||||||
void
|
void
|
||||||
typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
|
typedef_print (struct type *type, struct symbol *new, struct ui_file *stream)
|
||||||
{
|
{
|
||||||
CHECK_TYPEDEF (type);
|
LA_PRINT_TYPEDEF (type, new, stream);
|
||||||
switch (current_language->la_language)
|
}
|
||||||
{
|
|
||||||
#ifdef _LANG_c
|
/* The default way to print a typedef. */
|
||||||
case language_c:
|
|
||||||
case language_cplus:
|
void
|
||||||
fprintf_filtered (stream, "typedef ");
|
default_print_typedef (struct type *type, struct symbol *new_symbol,
|
||||||
type_print (type, "", stream, 0);
|
struct ui_file *stream)
|
||||||
if (TYPE_NAME ((SYMBOL_TYPE (new))) == 0
|
{
|
||||||
|| strcmp (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_LINKAGE_NAME (new)) != 0)
|
error (_("Language not supported."));
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print a description of a type TYPE in the form of a declaration of a
|
/* Print a description of a type TYPE in the form of a declaration of a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue