[PATCH RFA] pascal language part 5 : support for 'info type'
Pierre Muller
muller@cerbere.u-strasbg.fr
Thu Aug 31 01:38:00 GMT 2000
The current CVS tree gives the following output for
a pascal executable:
(gdb) info type
Language not supported
This is due to missing support of language_pascal in the
c_typedef_print function in c-typeprint.c source.
However this function is not C specific at all, thus my patch
removes c_typedef_print from c-typeprint.c and replaces it by
a new function typedef_print in typeprint.c source.
(typedef_print function is just the old c_typedef_print function
with pascal language support added !)
ChangeLog entry:
2000-08-31 Pierre Muller <muller@ics.u-strasbg.fr>
* c-typeprint.c (c_typedef_print): remove (replaced by typedef_print in
typeprint.c).
* typeprint.c (typedef_print): new function. (old c_typedef_print
function with pascal language support added).
* value.h (c_printdef_print): removed.
(typedef_print): declare.
* symtab.c (print_symbol_info): call to c_typedef_print replaced by
call to typedef_print.
Index: c-typeprint.c
===================================================================
RCS file: /cvs/src/src/gdb/c-typeprint.c,v
retrieving revision 1.2
diff -b -c -r1.2 c-typeprint.c
*** c-typeprint.c 2000/07/30 01:48:24 1.2
--- c-typeprint.c 2000/08/31 08:22:10
***************
*** 58,111 ****
- /* 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. */
-
- void
- c_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
- || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
- fprintf_filtered (stream, " %s", SYMBOL_SOURCE_NAME (new));
- break;
- #endif
- #ifdef _LANG_m2
- case language_m2:
- fprintf_filtered (stream, "TYPE ");
- if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
- !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
- fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
- else
- fprintf_filtered (stream, "<builtin> = ");
- type_print (type, "", stream, 0);
- break;
- #endif
- #ifdef _LANG_chill
- case language_chill:
- fprintf_filtered (stream, "SYNMODE ");
- if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
- !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
- fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
- else
- fprintf_filtered (stream, "<builtin> = ");
- type_print (type, "", stream, 0);
- break;
- #endif
- default:
- error ("Language not supported.");
- }
- fprintf_filtered (stream, ";\n");
- }
-
/* LEVEL is the depth to indent lines by. */
--- 58,63 ----
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.13
diff -b -c -r1.13 symtab.c
*** symtab.c 2000/08/25 20:51:19 1.13
--- symtab.c 2000/08/31 08:22:34
***************
*** 3829,3835 ****
/* Typedef that is not a C++ class */
if (kind == TYPES_NAMESPACE
&& SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
! c_typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
/* variable, func, or typedef-that-is-c++-class */
else if (kind < TYPES_NAMESPACE ||
(kind == TYPES_NAMESPACE &&
--- 3829,3835 ----
/* Typedef that is not a C++ class */
if (kind == TYPES_NAMESPACE
&& SYMBOL_NAMESPACE (sym) != STRUCT_NAMESPACE)
! typedef_print (SYMBOL_TYPE (sym), sym, gdb_stdout);
/* variable, func, or typedef-that-is-c++-class */
else if (kind < TYPES_NAMESPACE ||
(kind == TYPES_NAMESPACE &&
Index: typeprint.c
===================================================================
RCS file: /cvs/src/src/gdb/typeprint.c,v
retrieving revision 1.5
diff -b -c -r1.5 typeprint.c
*** typeprint.c 2000/07/30 01:48:27 1.5
--- typeprint.c 2000/08/31 08:22:35
***************
*** 49,54 ****
--- 49,109 ----
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. */
+
+ 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
+ || !STREQ (TYPE_NAME ((SYMBOL_TYPE (new))), SYMBOL_NAME (new)))
+ fprintf_filtered (stream, " %s", SYMBOL_SOURCE_NAME (new));
+ break;
+ #endif
+ #ifdef _LANG_m2
+ case language_m2:
+ fprintf_filtered (stream, "TYPE ");
+ if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
+ !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
+ fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_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_SOURCE_NAME (new));
+ type_print (type, "", stream, 0);
+ break;
+ #endif
+ #ifdef _LANG_chill
+ case language_chill:
+ fprintf_filtered (stream, "SYNMODE ");
+ if (!TYPE_NAME (SYMBOL_TYPE (new)) ||
+ !STREQ (TYPE_NAME (SYMBOL_TYPE (new)), SYMBOL_NAME (new)))
+ fprintf_filtered (stream, "%s = ", SYMBOL_SOURCE_NAME (new));
+ else
+ fprintf_filtered (stream, "<builtin> = ");
+ 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
variable named VARSTRING. (VARSTRING is demangled if necessary.)
Output goes to STREAM (via stdio).
Index: value.h
===================================================================
RCS file: /cvs/src/src/gdb/value.h,v
retrieving revision 1.9
diff -b -c -r1.9 value.h
*** value.h 2000/08/25 21:03:00 1.9
--- value.h 2000/08/31 08:22:35
***************
*** 536,542 ****
extern int check_field (value_ptr, const char *);
! extern void c_typedef_print (struct type * type, struct symbol * news,
struct ui_file * stream);
extern char *internalvar_name (struct internalvar *var);
--- 536,542 ----
extern int check_field (value_ptr, const char *);
! extern void typedef_print (struct type * type, struct symbol * news,
struct ui_file * stream);
extern char *internalvar_name (struct internalvar *var);
Pierre Muller
Institut Charles Sadron
6,rue Boussingault
F 67083 STRASBOURG CEDEX (France)
mailto:muller@ics.u-strasbg.fr
Phone : (33)-3-88-41-40-07 Fax : (33)-3-88-41-40-99
More information about the Gdb-patches
mailing list