**** start-sanitize-chill ****

* ch-typeprint.c (chill_print_type_base):  Name changed to
	chill_type_print_base to match pattern for C and C++ names.
	* ch-typeprint.c (chill_print_type):  Change "char" to "CHAR"
	to be consistent with other usages.
	* ch-typeprint.c (chill_type_print_base):  Add support for
	printing Chill STRUCT types.
	* ch-valprint.c:  Include values.h.
	* ch-valprint.c (chill_print_value_fields):  New function and
	prototype for printing Chill STRUCT values.
	* ch-valprint.c (chill_val_print):  Fix call to val_print_string
	that was being called with two args instead of three.
	* ch-valprint.c (chill_val_print):  Call chill_print_value_fields
	to print Chill STRUCT values.
	**** end-sanitize-chill ****
This commit is contained in:
Fred Fish 1993-02-24 15:49:47 +00:00
parent 0cca30f32a
commit 8fbdca53aa
3 changed files with 170 additions and 12 deletions

View File

@ -1,3 +1,21 @@
Wed Feb 24 07:41:15 1993 Fred Fish (fnf@cygnus.com)
**** start-sanitize-chill ****
* ch-typeprint.c (chill_print_type_base): Name changed to
chill_type_print_base to match pattern for C and C++ names.
* ch-typeprint.c (chill_print_type): Change "char" to "CHAR"
to be consistent with other usages.
* ch-typeprint.c (chill_type_print_base): Add support for
printing Chill STRUCT types.
* ch-valprint.c: Include values.h.
* ch-valprint.c (chill_print_value_fields): New function and
prototype for printing Chill STRUCT values.
* ch-valprint.c (chill_val_print): Fix call to val_print_string
that was being called with two args instead of three.
* ch-valprint.c (chill_val_print): Call chill_print_value_fields
to print Chill STRUCT values.
**** end-sanitize-chill ****
Tue Feb 23 18:58:11 1993 Mike Werner (mtw@poseidon.cygnus.com) Tue Feb 23 18:58:11 1993 Mike Werner (mtw@poseidon.cygnus.com)
* configure.in: added testsuite to configdirs. * configure.in: added testsuite to configdirs.

View File

@ -35,8 +35,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
void static void
chill_print_type_base PARAMS ((struct type *, FILE *, int, int)); chill_type_print_base PARAMS ((struct type *, FILE *, int, int));
void void
chill_print_type (type, varstring, stream, show, level) chill_print_type (type, varstring, stream, show, level)
@ -75,13 +75,13 @@ chill_print_type (type, varstring, stream, show, level)
range_type = TYPE_FIELD_TYPE (type, 0); range_type = TYPE_FIELD_TYPE (type, 0);
index_type = TYPE_TARGET_TYPE (range_type); index_type = TYPE_TARGET_TYPE (range_type);
high_bound = TYPE_FIELD_BITPOS (range_type, 1); high_bound = TYPE_FIELD_BITPOS (range_type, 1);
fputs_filtered ("char (", stream); fputs_filtered ("CHAR (", stream);
print_type_scalar (index_type, high_bound + 1, stream); print_type_scalar (index_type, high_bound + 1, stream);
fputs_filtered (") ", stream); fputs_filtered (")", stream);
break; break;
default: default:
chill_print_type_base (type, stream, show, level); chill_type_print_base (type, stream, show, level);
break; break;
} }
} }
@ -98,13 +98,17 @@ chill_print_type (type, varstring, stream, show, level)
LEVEL is the depth to indent by. LEVEL is the depth to indent by.
We increase it for some recursive calls. */ We increase it for some recursive calls. */
void static void
chill_print_type_base (type, stream, show, level) chill_type_print_base (type, stream, show, level)
struct type *type; struct type *type;
FILE *stream; FILE *stream;
int show; int show;
int level; int level;
{ {
char *name;
register int len;
register int i;
QUIT; QUIT;
wrap_here (" "); wrap_here (" ");
@ -130,7 +134,55 @@ chill_print_type_base (type, stream, show, level)
case TYPE_CODE_MEMBER: case TYPE_CODE_MEMBER:
case TYPE_CODE_REF: case TYPE_CODE_REF:
case TYPE_CODE_FUNC: case TYPE_CODE_FUNC:
chill_print_type_base (TYPE_TARGET_TYPE (type), stream, show, level); chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
break;
case TYPE_CODE_STRUCT:
fprintf_filtered (stream, "STRUCT ");
if ((name = type_name_no_tag (type)) != NULL)
{
fputs_filtered (name, stream);
fputs_filtered (" ", stream);
wrap_here (" ");
}
if (show < 0)
{
fprintf_filtered (stream, "(...)");
}
else
{
check_stub_type (type);
fprintf_filtered (stream, "(\n");
if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
{
if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
{
fprintfi_filtered (level + 4, stream, "<incomplete type>\n");
}
else
{
fprintfi_filtered (level + 4, stream, "<no data fields>\n");
}
}
else
{
len = TYPE_NFIELDS (type);
for (i = TYPE_N_BASECLASSES (type); i < len; i++)
{
QUIT;
print_spaces_filtered (level + 4, stream);
chill_print_type (TYPE_FIELD_TYPE (type, i),
TYPE_FIELD_NAME (type, i),
stream, show - 1, level + 4);
if (i < (len - 1))
{
fputs_filtered (",", stream);
}
fputs_filtered ("\n", stream);
}
}
fprintfi_filtered (level, stream, ")");
}
break; break;
case TYPE_CODE_VOID: case TYPE_CODE_VOID:
@ -139,9 +191,8 @@ chill_print_type_base (type, stream, show, level)
case TYPE_CODE_RANGE: case TYPE_CODE_RANGE:
case TYPE_CODE_ENUM: case TYPE_CODE_ENUM:
case TYPE_CODE_UNION: case TYPE_CODE_UNION:
case TYPE_CODE_STRUCT:
case TYPE_CODE_METHOD: case TYPE_CODE_METHOD:
error ("missing language support in chill_print_type_base"); error ("missing language support in chill_type_print_base");
break; break;
default: default:

View File

@ -23,8 +23,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "gdbtypes.h" #include "gdbtypes.h"
#include "valprint.h" #include "valprint.h"
#include "expression.h" #include "expression.h"
#include "value.h"
#include "language.h" #include "language.h"
static void
chill_print_value_fields PARAMS ((struct type *, char *, FILE *, int, int,
enum val_prettyprint, struct type **));
/* Print data of type TYPE located at VALADDR (within GDB), which came from /* Print data of type TYPE located at VALADDR (within GDB), which came from
the inferior at address ADDRESS, onto stdio stream STREAM according to the inferior at address ADDRESS, onto stdio stream STREAM according to
@ -164,7 +169,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
In that case don't try to print the string. */ In that case don't try to print the string. */
print_max < UINT_MAX) print_max < UINT_MAX)
{ {
i = val_print_string (addr, stream); i = val_print_string (addr, 0, stream);
} }
/* Return number of characters printed, plus one for the /* Return number of characters printed, plus one for the
terminating null if we have "reached the end". */ terminating null if we have "reached the end". */
@ -188,10 +193,14 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
return (i + (print_max && i != print_max)); return (i + (print_max && i != print_max));
break; break;
case TYPE_CODE_STRUCT:
chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
0);
break;
case TYPE_CODE_MEMBER: case TYPE_CODE_MEMBER:
case TYPE_CODE_REF: case TYPE_CODE_REF:
case TYPE_CODE_UNION: case TYPE_CODE_UNION:
case TYPE_CODE_STRUCT:
case TYPE_CODE_ENUM: case TYPE_CODE_ENUM:
case TYPE_CODE_FUNC: case TYPE_CODE_FUNC:
case TYPE_CODE_VOID: case TYPE_CODE_VOID:
@ -207,3 +216,83 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
fflush (stream); fflush (stream);
return (0); return (0);
} }
/* Mutually recursive subroutines of cplus_print_value and c_val_print to
print out a structure's fields: cp_print_value_fields and cplus_print_value.
TYPE, VALADDR, STREAM, RECURSE, and PRETTY have the
same meanings as in cplus_print_value and c_val_print.
DONT_PRINT is an array of baseclass types that we
should not print, or zero if called from top level. */
static void
chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
dont_print)
struct type *type;
char *valaddr;
FILE *stream;
int format;
int recurse;
enum val_prettyprint pretty;
struct type **dont_print;
{
int i, len;
int fields_seen = 0;
check_stub_type (type);
fprintf_filtered (stream, "(");
len = TYPE_NFIELDS (type);
if (len == 0)
{
fprintf_filtered (stream, "<No data fields>");
}
else
{
for (i = 0; i < len; i++)
{
if (fields_seen)
{
fprintf_filtered (stream, ", ");
}
fields_seen = 1;
if (pretty)
{
fprintf_filtered (stream, "\n");
print_spaces_filtered (2 + 2 * recurse, stream);
}
else
{
wrap_here (n_spaces (2 + 2 * recurse));
}
fprint_symbol (stream, TYPE_FIELD_NAME (type, i));
fputs_filtered (" = ", stream);
if (TYPE_FIELD_PACKED (type, i))
{
value v;
/* Bitfields require special handling, especially due to byte
order problems. */
v = value_from_longest (TYPE_FIELD_TYPE (type, i),
unpack_field_as_long (type, valaddr, i));
chill_val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0,
stream, format, 0, recurse + 1, pretty);
}
else
{
chill_val_print (TYPE_FIELD_TYPE (type, i),
valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
0, stream, format, 0, recurse + 1, pretty);
}
}
if (pretty)
{
fprintf_filtered (stream, "\n");
print_spaces_filtered (2 * recurse, stream);
}
}
fprintf_filtered (stream, ")");
}