* gdbtypes.h, ch-typeprint.c, ch-valprint.c:

Change comments regarding TYPE_CODE_BOOL.
	* language.c (boolean_type): Always return 1 for TYPE_CODE_BOOL,
	regardless of the language.
	(value_true): Just call value_logical_not regardless of language.
	* coffread.c (coff_read_enum_type), stabsread.c (read_enum_type):
	Remove #if 0'd code which makes some enums TYPE_CODE_BOOL.
	* language.h: Improve comment for la_builtin_type_vector.
	* m2-lang.c (_initialize_m2_language): Don't add any fields to
	builtin_type_m2_bool.
This commit is contained in:
Jim Kingdon 1994-02-02 17:20:45 +00:00
parent 1051c97f63
commit 61932a8ee9
8 changed files with 50 additions and 74 deletions

View File

@ -1,3 +1,16 @@
Wed Feb 2 11:16:45 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
* gdbtypes.h, ch-typeprint.c, ch-valprint.c:
Change comments regarding TYPE_CODE_BOOL.
* language.c (boolean_type): Always return 1 for TYPE_CODE_BOOL,
regardless of the language.
(value_true): Just call value_logical_not regardless of language.
* coffread.c (coff_read_enum_type), stabsread.c (read_enum_type):
Remove #if 0'd code which makes some enums TYPE_CODE_BOOL.
* language.h: Improve comment for la_builtin_type_vector.
* m2-lang.c (_initialize_m2_language): Don't add any fields to
builtin_type_m2_bool.
Tue Feb 1 17:13:32 1994 Kevin Buettner (kev@cujo.geg.mot.com)
* config/m88k/{tm-delta88.h,tm-delta88v4.h}, m88k-tdep.c:

View File

@ -115,6 +115,10 @@ chill_type_print_base (type, stream, show, level)
break;
case TYPE_CODE_BOOL:
/* FIXME: we should probably just print the TYPE_NAME, in case
anyone ever fixes the compiler to give us the real names
in the presence of the chill equivalent of typedef (assuming
there is one). */
fprintf_filtered (stream, "BOOL");
break;

View File

@ -128,6 +128,7 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
}
else
{
/* FIXME: Why is this using builtin_type_chill_bool not type? */
val = unpack_long (builtin_type_chill_bool, valaddr);
fprintf_filtered (stream, val ? "TRUE" : "FALSE");
}

View File

@ -111,14 +111,18 @@ enum type_code
TYPE_CODE_METHOD, /* Method type */
TYPE_CODE_REF, /* C++ Reference types */
/* Modula-2 */
TYPE_CODE_CHAR, /* *real* character type */
TYPE_CODE_BOOL /* BOOLEAN type */
/* Boolean type. 0 is false, 1 is true, and other values are non-boolean
(e.g. FORTRAN "logical" used as unsigned int). */
TYPE_CODE_BOOL
};
/* For now allow source to use TYPE_CODE_CLASS for C++ classes, as an
alias for TYPE_CODE_STRUCT. Eventually these should probably be
officially distinct types within gdb. */
alias for TYPE_CODE_STRUCT. This is for DWARF, which has a distinct
"class" attribute. Perhaps we should actually have a separate TYPE_CODE
so that we can print "class" or "struct" depending on what the debug
info said. It's not clear we should bother. */
#define TYPE_CODE_CLASS TYPE_CODE_STRUCT

View File

@ -698,18 +698,20 @@ int
boolean_type (type)
struct type *type;
{
switch(current_language->la_language)
{
case language_chill:
case language_m2:
return TYPE_CODE(type) != TYPE_CODE_BOOL ? 0 : 1;
case language_c:
case language_cplus:
return TYPE_CODE(type) != TYPE_CODE_INT ? 0 : 1;
if (TYPE_CODE (type) == TYPE_CODE_BOOL)
return 1;
switch(current_language->la_language)
{
case language_c:
case language_cplus:
/* Might be more cleanly handled by having a TYPE_CODE_INT_NOT_BOOL
for CHILL and such languages, or a TYPE_CODE_INT_OR_BOOL for C. */
if (TYPE_CODE (type) == TYPE_CODE_INT)
return 1;
default:
return (0);
break;
}
return 0;
}
/* Returns non-zero if the value is a floating-point type */
@ -757,46 +759,16 @@ structured_type(type)
/* Returns non-zero if the value VAL represents a true value. */
int
value_true(val)
value_true (val)
value val;
{
int len, i;
struct type *type;
LONGEST v;
switch (current_language->la_language) {
case language_c:
case language_cplus:
return !value_logical_not (val);
case language_m2:
type = VALUE_TYPE(val);
if (TYPE_CODE (type) != TYPE_CODE_BOOL)
return 0; /* Not a BOOLEAN at all */
/* Search the fields for one that matches the current value. */
len = TYPE_NFIELDS (type);
v = value_as_long (val);
for (i = 0; i < len; i++)
{
QUIT;
if (v == TYPE_FIELD_BITPOS (type, i))
break;
}
if (i >= len)
return 0; /* Not a valid BOOLEAN value */
if (STREQ ("TRUE", TYPE_FIELD_NAME(VALUE_TYPE(val), i)))
return 1; /* BOOLEAN with value TRUE */
else
return 0; /* BOOLEAN with value FALSE */
break;
case language_chill:
error ("Missing Chill support in function value_type."); /*FIXME*/
default:
error ("Language not supported.");
}
/* It is possible that we should have some sort of error if a non-boolean
value is used in this context. Possibly dependent on some kind of
"boolean-checking" option like range checking. But it should probably
not depend on the language except insofar as is necessary to identify
a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
should be an error, probably). */
return !value_logical_not (val);
}
/* Returns non-zero if the operator OP is defined on

View File

@ -106,7 +106,10 @@ struct language_defn
enum language la_language;
/* Its builtin types */
/* Its builtin types. This is a vector ended by a NULL pointer. These
types can be specified by name in parsing types in expressions,
regardless of whether the program being debugged actually defines
such a type. */
struct type ** const *la_builtin_type_vector;

View File

@ -443,15 +443,5 @@ _initialize_m2_language ()
TYPE_FLAG_UNSIGNED,
"BOOLEAN", (struct objfile *) NULL);
TYPE_NFIELDS(builtin_type_m2_bool) = 2;
TYPE_FIELDS(builtin_type_m2_bool) =
(struct field *) xmalloc (sizeof (struct field) * 2);
TYPE_FIELD_BITPOS(builtin_type_m2_bool,0) = 0;
TYPE_FIELD_NAME(builtin_type_m2_bool,0) = (char *)xmalloc(6);
strcpy(TYPE_FIELD_NAME(builtin_type_m2_bool,0),"FALSE");
TYPE_FIELD_BITPOS(builtin_type_m2_bool,1) = 1;
TYPE_FIELD_NAME(builtin_type_m2_bool,1) = (char *)xmalloc(5);
strcpy(TYPE_FIELD_NAME(builtin_type_m2_bool,1),"TRUE");
add_language (&m2_language_defn);
}

View File

@ -2980,17 +2980,6 @@ read_enum_type (pp, type, objfile)
break;
}
#if 0
/* This screws up perfectly good C programs with enums. FIXME. */
/* Is this Modula-2's BOOLEAN type? Flag it as such if so. */
if(TYPE_NFIELDS(type) == 2 &&
((STREQ(TYPE_FIELD_NAME(type,0),"TRUE") &&
STREQ(TYPE_FIELD_NAME(type,1),"FALSE")) ||
(STREQ(TYPE_FIELD_NAME(type,1),"TRUE") &&
STREQ(TYPE_FIELD_NAME(type,0),"FALSE"))))
TYPE_CODE(type) = TYPE_CODE_BOOL;
#endif
return type;
}