* 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:
parent
1051c97f63
commit
61932a8ee9
@ -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:
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user