mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 05:12:28 +08:00
* ch-exp.y: Remove ambiguities. Fix or add support for
UNOP_IND, UNOP_CAST, UNOP_ADDR, STRUCOP_STRUCT, OP_TYPE. * ch-typeprint.c (chill_print_type): Move support for TYPE_CODE_ARRAY and TYPE_CODE_STRING from here ... * ch-typeprint.c (chill_type_print_base): ... here. * ch-typeprint.c (chill_type_print_base): Improve support for PTR, REF, and FUNC types. * ch-valprint.c: Prefer H'%x format to 0x%s. * ch-valprint.c (chill_val_print): Add support for printing TYPE_CODE_REF (return for LOC parameters and variables). Use c_val_print to print random types (including ENUM). * ch-valprint,c (chill_print_value_fields): Make output look more like Chill tuples. * stabsread.c (read_struct_type): Factor common code.
This commit is contained in:
@ -1,3 +1,20 @@
|
|||||||
|
Tue Apr 6 00:24:32 1993 Per Bothner (bothner@rtl.cygnus.com)
|
||||||
|
|
||||||
|
* ch-exp.y: Remove ambiguities. Fix or add support for
|
||||||
|
UNOP_IND, UNOP_CAST, UNOP_ADDR, STRUCOP_STRUCT, OP_TYPE.
|
||||||
|
* ch-typeprint.c (chill_print_type): Move support
|
||||||
|
for TYPE_CODE_ARRAY and TYPE_CODE_STRING from here ...
|
||||||
|
* ch-typeprint.c (chill_type_print_base): ... here.
|
||||||
|
* ch-typeprint.c (chill_type_print_base): Improve
|
||||||
|
support for PTR, REF, and FUNC types.
|
||||||
|
* ch-valprint.c: Prefer H'%x format to 0x%s.
|
||||||
|
* ch-valprint.c (chill_val_print): Add support for printing
|
||||||
|
TYPE_CODE_REF (return for LOC parameters and variables).
|
||||||
|
Use c_val_print to print random types (including ENUM).
|
||||||
|
* ch-valprint,c (chill_print_value_fields): Make
|
||||||
|
output look more like Chill tuples.
|
||||||
|
* stabsread.c (read_struct_type): Factor common code.
|
||||||
|
|
||||||
Wed Apr 7 11:22:43 1993 Fred Fish (fnf@cygnus.com)
|
Wed Apr 7 11:22:43 1993 Fred Fish (fnf@cygnus.com)
|
||||||
|
|
||||||
* sparclite/Makefile.in: Add dummy mostlyclean, clean,
|
* sparclite/Makefile.in: Add dummy mostlyclean, clean,
|
||||||
|
75
gdb/ch-exp.y
75
gdb/ch-exp.y
@ -181,6 +181,8 @@ yyerror PARAMS ((char *));
|
|||||||
%token <voidval> EMPTINESS_LITERAL
|
%token <voidval> EMPTINESS_LITERAL
|
||||||
%token <sval> CHARACTER_STRING_LITERAL
|
%token <sval> CHARACTER_STRING_LITERAL
|
||||||
%token <sval> BIT_STRING_LITERAL
|
%token <sval> BIT_STRING_LITERAL
|
||||||
|
%token <tsym> TYPENAME
|
||||||
|
%token <sval> FIELD_NAME
|
||||||
|
|
||||||
%token <voidval> '.'
|
%token <voidval> '.'
|
||||||
%token <voidval> ';'
|
%token <voidval> ';'
|
||||||
@ -291,11 +293,9 @@ yyerror PARAMS ((char *));
|
|||||||
%type <voidval> upper_element
|
%type <voidval> upper_element
|
||||||
%type <voidval> first_element
|
%type <voidval> first_element
|
||||||
%type <voidval> structure_primitive_value
|
%type <voidval> structure_primitive_value
|
||||||
%type <voidval> field_name
|
|
||||||
%type <voidval> mode_argument
|
%type <voidval> mode_argument
|
||||||
%type <voidval> upper_lower_argument
|
%type <voidval> upper_lower_argument
|
||||||
%type <voidval> length_argument
|
%type <voidval> length_argument
|
||||||
%type <voidval> mode_name
|
|
||||||
%type <voidval> array_mode_name
|
%type <voidval> array_mode_name
|
||||||
%type <voidval> string_mode_name
|
%type <voidval> string_mode_name
|
||||||
%type <voidval> variant_structure_mode_name
|
%type <voidval> variant_structure_mode_name
|
||||||
@ -304,13 +304,20 @@ yyerror PARAMS ((char *));
|
|||||||
%type <voidval> subexpression
|
%type <voidval> subexpression
|
||||||
%type <voidval> case_label_specification
|
%type <voidval> case_label_specification
|
||||||
%type <voidval> buffer_location
|
%type <voidval> buffer_location
|
||||||
|
|
||||||
%type <voidval> single_assignment_action
|
%type <voidval> single_assignment_action
|
||||||
|
%type <tsym> mode_name
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
/* Z.200, 5.3.1 */
|
/* Z.200, 5.3.1 */
|
||||||
|
|
||||||
|
start : value
|
||||||
|
| mode_name
|
||||||
|
{ write_exp_elt_opcode(OP_TYPE);
|
||||||
|
write_exp_elt_type($1.type);
|
||||||
|
write_exp_elt_opcode(OP_TYPE);}
|
||||||
|
;
|
||||||
|
|
||||||
value : expression
|
value : expression
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
@ -333,9 +340,9 @@ location : access_name
|
|||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
}
|
}
|
||||||
| FIXME_02
|
| primitive_value POINTER
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
write_exp_elt_opcode (UNOP_IND);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -588,9 +595,10 @@ value_array_slice: array_primitive_value '(' lower_element ':' upper_element ')'
|
|||||||
|
|
||||||
/* Z.200, 5.2.10 */
|
/* Z.200, 5.2.10 */
|
||||||
|
|
||||||
value_structure_field: structure_primitive_value '.' field_name
|
value_structure_field: primitive_value FIELD_NAME
|
||||||
{
|
{ write_exp_elt_opcode (STRUCTOP_STRUCT);
|
||||||
$$ = 0; /* FIXME */
|
write_exp_string ($2);
|
||||||
|
write_exp_elt_opcode (STRUCTOP_STRUCT);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -598,7 +606,9 @@ value_structure_field: structure_primitive_value '.' field_name
|
|||||||
|
|
||||||
expression_conversion: mode_name parenthesised_expression
|
expression_conversion: mode_name parenthesised_expression
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
write_exp_elt_opcode (UNOP_CAST);
|
||||||
|
write_exp_elt_type ($1.type);
|
||||||
|
write_exp_elt_opcode (UNOP_CAST);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -648,6 +658,10 @@ expression : operand_0
|
|||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
}
|
}
|
||||||
|
| single_assignment_action
|
||||||
|
{
|
||||||
|
$$ = 0; /* FIXME */
|
||||||
|
}
|
||||||
| conditional_expression
|
| conditional_expression
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
@ -710,10 +724,6 @@ operand_0 : operand_1
|
|||||||
{
|
{
|
||||||
write_exp_elt_opcode (BINOP_BITWISE_XOR);
|
write_exp_elt_opcode (BINOP_BITWISE_XOR);
|
||||||
}
|
}
|
||||||
| single_assignment_action
|
|
||||||
{
|
|
||||||
$$ = 0; /* FIXME */
|
|
||||||
}
|
|
||||||
;
|
;
|
||||||
|
|
||||||
/* Z.200, 5.3.4 */
|
/* Z.200, 5.3.4 */
|
||||||
@ -814,8 +824,6 @@ operand_4 : operand_5
|
|||||||
;
|
;
|
||||||
|
|
||||||
/* Z.200, 5.3.8 */
|
/* Z.200, 5.3.8 */
|
||||||
/* Note that we accept any expression for BINOP_CONCAT, not just
|
|
||||||
integer literal expressions. (FIXME?) */
|
|
||||||
|
|
||||||
operand_5 : operand_6
|
operand_5 : operand_6
|
||||||
{
|
{
|
||||||
@ -829,7 +837,9 @@ operand_5 : operand_6
|
|||||||
{
|
{
|
||||||
write_exp_elt_opcode (UNOP_LOGICAL_NOT);
|
write_exp_elt_opcode (UNOP_LOGICAL_NOT);
|
||||||
}
|
}
|
||||||
| parenthesised_expression operand_6
|
| parenthesised_expression CHARACTER_STRING_LITERAL
|
||||||
|
/* We require the string operand to be a literal, to avoid some
|
||||||
|
nasty parsing ambiguities. */
|
||||||
{
|
{
|
||||||
write_exp_elt_opcode (BINOP_CONCAT);
|
write_exp_elt_opcode (BINOP_CONCAT);
|
||||||
}
|
}
|
||||||
@ -839,7 +849,7 @@ operand_5 : operand_6
|
|||||||
|
|
||||||
operand_6 : POINTER location
|
operand_6 : POINTER location
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
write_exp_elt_opcode (UNOP_ADDR);
|
||||||
}
|
}
|
||||||
| RECEIVE buffer_location
|
| RECEIVE buffer_location
|
||||||
{
|
{
|
||||||
@ -932,11 +942,10 @@ mode_argument : mode_name
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
upper_lower_argument : location
|
mode_name : TYPENAME
|
||||||
{
|
;
|
||||||
$$ = 0; /* FIXME */
|
|
||||||
}
|
upper_lower_argument : expression
|
||||||
| expression
|
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
}
|
}
|
||||||
@ -946,11 +955,7 @@ upper_lower_argument : location
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
length_argument : location
|
length_argument : expression
|
||||||
{
|
|
||||||
$$ = 0; /* FIXME */
|
|
||||||
}
|
|
||||||
| expression
|
|
||||||
{
|
{
|
||||||
$$ = 0; /* FIXME */
|
$$ = 0; /* FIXME */
|
||||||
}
|
}
|
||||||
@ -983,8 +988,6 @@ lower_element : FIXME_20 { $$ = 0; }
|
|||||||
upper_element : FIXME_21 { $$ = 0; }
|
upper_element : FIXME_21 { $$ = 0; }
|
||||||
first_element : FIXME_22 { $$ = 0; }
|
first_element : FIXME_22 { $$ = 0; }
|
||||||
structure_primitive_value: FIXME_23 { $$ = 0; }
|
structure_primitive_value: FIXME_23 { $$ = 0; }
|
||||||
field_name : FIXME_24 { $$ = 0; }
|
|
||||||
mode_name : FIXME_25 { $$ = 0; }
|
|
||||||
boolean_expression : FIXME_26 { $$ = 0; }
|
boolean_expression : FIXME_26 { $$ = 0; }
|
||||||
case_selector_list : FIXME_27 { $$ = 0; }
|
case_selector_list : FIXME_27 { $$ = 0; }
|
||||||
subexpression : FIXME_28 { $$ = 0; }
|
subexpression : FIXME_28 { $$ = 0; }
|
||||||
@ -1762,6 +1765,7 @@ static const struct token tokentab2[] =
|
|||||||
{
|
{
|
||||||
{ ":=", GDB_ASSIGNMENT },
|
{ ":=", GDB_ASSIGNMENT },
|
||||||
{ "//", SLASH_SLASH },
|
{ "//", SLASH_SLASH },
|
||||||
|
{ "->", POINTER },
|
||||||
{ "/=", NOTEQUAL },
|
{ "/=", NOTEQUAL },
|
||||||
{ "<=", LEQ },
|
{ "<=", LEQ },
|
||||||
{ ">=", GTR },
|
{ ">=", GTR },
|
||||||
@ -1797,7 +1801,6 @@ yylex ()
|
|||||||
case ';':
|
case ';':
|
||||||
case '!':
|
case '!':
|
||||||
case '+':
|
case '+':
|
||||||
case '-':
|
|
||||||
case '*':
|
case '*':
|
||||||
case '(':
|
case '(':
|
||||||
case ')':
|
case ')':
|
||||||
@ -1896,6 +1899,7 @@ yylex ()
|
|||||||
would already have found it. */
|
would already have found it. */
|
||||||
switch (*lexptr)
|
switch (*lexptr)
|
||||||
{
|
{
|
||||||
|
case '-':
|
||||||
case ':':
|
case ':':
|
||||||
case '/':
|
case '/':
|
||||||
case '<':
|
case '<':
|
||||||
@ -1976,8 +1980,10 @@ yylex ()
|
|||||||
case LOC_LABEL:
|
case LOC_LABEL:
|
||||||
return (LOCATION_NAME);
|
return (LOCATION_NAME);
|
||||||
break;
|
break;
|
||||||
case LOC_UNDEF:
|
|
||||||
case LOC_TYPEDEF:
|
case LOC_TYPEDEF:
|
||||||
|
yylval.tsym.type = SYMBOL_TYPE (sym);
|
||||||
|
return TYPENAME;
|
||||||
|
case LOC_UNDEF:
|
||||||
case LOC_CONST_BYTES:
|
case LOC_CONST_BYTES:
|
||||||
case LOC_OPTIMIZED_OUT:
|
case LOC_OPTIMIZED_OUT:
|
||||||
error ("Symbol \"%s\" names no location.", simplename);
|
error ("Symbol \"%s\" names no location.", simplename);
|
||||||
@ -2000,7 +2006,12 @@ yylex ()
|
|||||||
switch (*lexptr)
|
switch (*lexptr)
|
||||||
{
|
{
|
||||||
case '.': /* Not float for example. */
|
case '.': /* Not float for example. */
|
||||||
return (*lexptr++);
|
lexptr++;
|
||||||
|
while (isspace (*lexptr)) lexptr++;
|
||||||
|
simplename = match_simple_name_string ();
|
||||||
|
if (!simplename)
|
||||||
|
return '.';
|
||||||
|
return FIELD_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ILLEGAL_TOKEN);
|
return (ILLEGAL_TOKEN);
|
||||||
|
@ -46,44 +46,12 @@ chill_print_type (type, varstring, stream, show, level)
|
|||||||
int show;
|
int show;
|
||||||
int level;
|
int level;
|
||||||
{
|
{
|
||||||
struct type *index_type;
|
|
||||||
struct type *range_type;
|
|
||||||
LONGEST low_bound;
|
|
||||||
LONGEST high_bound;
|
|
||||||
|
|
||||||
if (varstring != NULL && *varstring != '\0')
|
if (varstring != NULL && *varstring != '\0')
|
||||||
{
|
{
|
||||||
fputs_filtered (varstring, stream);
|
fputs_filtered (varstring, stream);
|
||||||
fputs_filtered (" ", stream);
|
fputs_filtered (" ", stream);
|
||||||
}
|
}
|
||||||
switch (TYPE_CODE (type))
|
chill_type_print_base (type, stream, show, level);
|
||||||
{
|
|
||||||
case TYPE_CODE_ARRAY:
|
|
||||||
range_type = TYPE_FIELD_TYPE (type, 0);
|
|
||||||
index_type = TYPE_TARGET_TYPE (range_type);
|
|
||||||
low_bound = TYPE_FIELD_BITPOS (range_type, 0);
|
|
||||||
high_bound = TYPE_FIELD_BITPOS (range_type, 1);
|
|
||||||
fputs_filtered ("array (", stream);
|
|
||||||
print_type_scalar (index_type, low_bound, stream);
|
|
||||||
fputs_filtered (":", stream);
|
|
||||||
print_type_scalar (index_type, high_bound, stream);
|
|
||||||
fputs_filtered (") ", stream);
|
|
||||||
chill_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TYPE_CODE_STRING:
|
|
||||||
range_type = TYPE_FIELD_TYPE (type, 0);
|
|
||||||
index_type = TYPE_TARGET_TYPE (range_type);
|
|
||||||
high_bound = TYPE_FIELD_BITPOS (range_type, 1);
|
|
||||||
fputs_filtered ("CHAR (", stream);
|
|
||||||
print_type_scalar (index_type, high_bound + 1, stream);
|
|
||||||
fputs_filtered (")", stream);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
chill_type_print_base (type, stream, show, level);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the name of the type (or the ultimate pointer target,
|
/* Print the name of the type (or the ultimate pointer target,
|
||||||
@ -108,6 +76,10 @@ chill_type_print_base (type, stream, show, level)
|
|||||||
char *name;
|
char *name;
|
||||||
register int len;
|
register int len;
|
||||||
register int i;
|
register int i;
|
||||||
|
struct type *index_type;
|
||||||
|
struct type *range_type;
|
||||||
|
LONGEST low_bound;
|
||||||
|
LONGEST high_bound;
|
||||||
|
|
||||||
QUIT;
|
QUIT;
|
||||||
|
|
||||||
@ -129,11 +101,48 @@ chill_type_print_base (type, stream, show, level)
|
|||||||
|
|
||||||
switch (TYPE_CODE (type))
|
switch (TYPE_CODE (type))
|
||||||
{
|
{
|
||||||
case TYPE_CODE_ARRAY:
|
|
||||||
case TYPE_CODE_PTR:
|
case TYPE_CODE_PTR:
|
||||||
|
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)
|
||||||
|
{
|
||||||
|
fprintf_filtered (stream, "PTR");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf_filtered (stream, "REF ");
|
||||||
|
chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_CODE_ARRAY:
|
||||||
|
range_type = TYPE_FIELD_TYPE (type, 0);
|
||||||
|
index_type = TYPE_TARGET_TYPE (range_type);
|
||||||
|
low_bound = TYPE_FIELD_BITPOS (range_type, 0);
|
||||||
|
high_bound = TYPE_FIELD_BITPOS (range_type, 1);
|
||||||
|
fputs_filtered ("ARRAY (", stream);
|
||||||
|
print_type_scalar (index_type, low_bound, stream);
|
||||||
|
fputs_filtered (":", stream);
|
||||||
|
print_type_scalar (index_type, high_bound, stream);
|
||||||
|
fputs_filtered (") ", stream);
|
||||||
|
chill_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_CODE_STRING:
|
||||||
|
range_type = TYPE_FIELD_TYPE (type, 0);
|
||||||
|
index_type = TYPE_TARGET_TYPE (range_type);
|
||||||
|
high_bound = TYPE_FIELD_BITPOS (range_type, 1);
|
||||||
|
fputs_filtered ("CHAR (", stream);
|
||||||
|
print_type_scalar (index_type, high_bound + 1, stream);
|
||||||
|
fputs_filtered (")", stream);
|
||||||
|
break;
|
||||||
|
|
||||||
case TYPE_CODE_MEMBER:
|
case TYPE_CODE_MEMBER:
|
||||||
|
fprintf_filtered (stream, "MEMBER ");
|
||||||
|
chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
|
||||||
|
break;
|
||||||
case TYPE_CODE_REF:
|
case TYPE_CODE_REF:
|
||||||
|
fprintf_filtered (stream, "/*LOC*/ ");
|
||||||
|
chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
|
||||||
|
break;
|
||||||
case TYPE_CODE_FUNC:
|
case TYPE_CODE_FUNC:
|
||||||
|
fprintf_filtered (stream, "PROC (?)");
|
||||||
chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
|
chill_type_print_base (TYPE_TARGET_TYPE (type), stream, show, level);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
}
|
}
|
||||||
if (addressprint && format != 's')
|
if (addressprint && format != 's')
|
||||||
{
|
{
|
||||||
fprintf_filtered (stream, "0x%x", addr);
|
fprintf_filtered (stream, "H'%x", addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For a pointer to char or unsigned char, also print the string
|
/* For a pointer to char or unsigned char, also print the string
|
||||||
@ -185,7 +185,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
}
|
}
|
||||||
if (addressprint && format != 's')
|
if (addressprint && format != 's')
|
||||||
{
|
{
|
||||||
fprintf_filtered (stream, "0x%x ", addr);
|
fprintf_filtered (stream, "H'%x ", addr);
|
||||||
}
|
}
|
||||||
i = TYPE_LENGTH (type);
|
i = TYPE_LENGTH (type);
|
||||||
LA_PRINT_STRING (stream, valaddr, i, 0);
|
LA_PRINT_STRING (stream, valaddr, i, 0);
|
||||||
@ -199,20 +199,50 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
0);
|
0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_CODE_MEMBER:
|
|
||||||
case TYPE_CODE_REF:
|
case TYPE_CODE_REF:
|
||||||
case TYPE_CODE_UNION:
|
if (addressprint)
|
||||||
|
{
|
||||||
|
fprintf_filtered (stream, "LOC(H'%lx)",
|
||||||
|
unpack_long (builtin_type_int, valaddr));
|
||||||
|
if (deref_ref)
|
||||||
|
fputs_filtered (": ", stream);
|
||||||
|
}
|
||||||
|
/* De-reference the reference. */
|
||||||
|
if (deref_ref)
|
||||||
|
{
|
||||||
|
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_UNDEF)
|
||||||
|
{
|
||||||
|
value deref_val =
|
||||||
|
value_at
|
||||||
|
(TYPE_TARGET_TYPE (type),
|
||||||
|
unpack_pointer (lookup_pointer_type (builtin_type_void),
|
||||||
|
valaddr));
|
||||||
|
val_print (VALUE_TYPE (deref_val),
|
||||||
|
VALUE_CONTENTS (deref_val),
|
||||||
|
VALUE_ADDRESS (deref_val), stream, format,
|
||||||
|
deref_ref, recurse + 1, pretty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fputs_filtered ("???", stream);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case TYPE_CODE_ENUM:
|
case TYPE_CODE_ENUM:
|
||||||
|
c_val_print (type, valaddr, address, stream, format,
|
||||||
|
deref_ref, recurse, pretty);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TYPE_CODE_MEMBER:
|
||||||
|
case TYPE_CODE_UNION:
|
||||||
case TYPE_CODE_FUNC:
|
case TYPE_CODE_FUNC:
|
||||||
case TYPE_CODE_VOID:
|
case TYPE_CODE_VOID:
|
||||||
case TYPE_CODE_ERROR:
|
case TYPE_CODE_ERROR:
|
||||||
case TYPE_CODE_RANGE:
|
case TYPE_CODE_RANGE:
|
||||||
error ("Unimplemented chill_val_print support for type %d",
|
|
||||||
TYPE_CODE (type));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error ("Invalid Chill type code %d in symbol table.", TYPE_CODE (type));
|
/* Let's derfer printing to the C printer, rather than
|
||||||
|
print an error message. FIXME! */
|
||||||
|
c_val_print (type, valaddr, address, stream, format,
|
||||||
|
deref_ref, recurse, pretty);
|
||||||
}
|
}
|
||||||
fflush (stream);
|
fflush (stream);
|
||||||
return (0);
|
return (0);
|
||||||
@ -243,7 +273,7 @@ chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
|
|||||||
|
|
||||||
check_stub_type (type);
|
check_stub_type (type);
|
||||||
|
|
||||||
fprintf_filtered (stream, "(");
|
fprintf_filtered (stream, "[");
|
||||||
len = TYPE_NFIELDS (type);
|
len = TYPE_NFIELDS (type);
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
@ -267,9 +297,10 @@ chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
|
|||||||
{
|
{
|
||||||
wrap_here (n_spaces (2 + 2 * recurse));
|
wrap_here (n_spaces (2 + 2 * recurse));
|
||||||
}
|
}
|
||||||
|
fputs_filtered (".", stream);
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
||||||
language_chill, DMGL_NO_OPTS);
|
language_chill, DMGL_NO_OPTS);
|
||||||
fputs_filtered (" = ", stream);
|
fputs_filtered (": ", stream);
|
||||||
if (TYPE_FIELD_PACKED (type, i))
|
if (TYPE_FIELD_PACKED (type, i))
|
||||||
{
|
{
|
||||||
value v;
|
value v;
|
||||||
@ -295,6 +326,6 @@ chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
|
|||||||
print_spaces_filtered (2 * recurse, stream);
|
print_spaces_filtered (2 * recurse, stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf_filtered (stream, ")");
|
fprintf_filtered (stream, "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2370,32 +2370,12 @@ read_struct_type (pp, type, objfile)
|
|||||||
member functions, attach them to the type, and then read any tilde
|
member functions, attach them to the type, and then read any tilde
|
||||||
field (baseclass specifier for the class holding the main vtable). */
|
field (baseclass specifier for the class holding the main vtable). */
|
||||||
|
|
||||||
if (!read_baseclasses (&fi, pp, type, objfile))
|
if (!read_baseclasses (&fi, pp, type, objfile)
|
||||||
{
|
|| !read_struct_fields (&fi, pp, type, objfile)
|
||||||
do_cleanups (back_to);
|
|| !attach_fields_to_type (&fi, type, objfile)
|
||||||
return (error_type (pp));
|
|| !read_member_functions (&fi, pp, type, objfile)
|
||||||
}
|
|| !attach_fn_fields_to_type (&fi, type)
|
||||||
if (!read_struct_fields (&fi, pp, type, objfile))
|
|| !read_tilde_fields (&fi, pp, type, objfile))
|
||||||
{
|
|
||||||
do_cleanups (back_to);
|
|
||||||
return (error_type (pp));
|
|
||||||
}
|
|
||||||
if (!attach_fields_to_type (&fi, type, objfile))
|
|
||||||
{
|
|
||||||
do_cleanups (back_to);
|
|
||||||
return (error_type (pp));
|
|
||||||
}
|
|
||||||
if (!read_member_functions (&fi, pp, type, objfile))
|
|
||||||
{
|
|
||||||
do_cleanups (back_to);
|
|
||||||
return (error_type (pp));
|
|
||||||
}
|
|
||||||
if (!attach_fn_fields_to_type (&fi, type))
|
|
||||||
{
|
|
||||||
do_cleanups (back_to);
|
|
||||||
return (error_type (pp));
|
|
||||||
}
|
|
||||||
if (!read_tilde_fields (&fi, pp, type, objfile))
|
|
||||||
{
|
{
|
||||||
do_cleanups (back_to);
|
do_cleanups (back_to);
|
||||||
return (error_type (pp));
|
return (error_type (pp));
|
||||||
|
Reference in New Issue
Block a user