#define FT_NUM_MEMBERS 28 /* Highest FT_* above, plus one. */
+/* Some macros for char-based bitfields. */
+
+#define B_SET(a,x) ((a)[(x)>>3] |= (1 << ((x)&7)))
+#define B_CLR(a,x) ((a)[(x)>>3] &= ~(1 << ((x)&7)))
+#define B_TST(a,x) ((a)[(x)>>3] & (1 << ((x)&7)))
+#define B_TYPE unsigned char
+#define B_BYTES(x) ( 1 + ((x)>>3) )
+#define B_CLRALL(a,x) memset ((a), 0, B_BYTES(x))
+
/* Different kinds of data types are distinguished by the `code' field. */
enum type_code
TYPE_CODE_VOID, /* Void type (values zero length) */
TYPE_CODE_SET, /* Pascal sets */
TYPE_CODE_RANGE, /* Range (integers within spec'd bounds) */
- TYPE_CODE_PASCAL_ARRAY, /* Array with explicit type of index */
+ TYPE_CODE_STRING, /* String types, distinct from array of char */
+ TYPE_CODE_BITSTRING, /* String of bits, distinct from bool array */
TYPE_CODE_ERROR, /* Unknown type */
/* C++ */
containing structure. For a function type, this is the
position in the argument list of this argument.
For a range bound or enum value, this is the value itself.
+ (FIXME: What about ranges larger than host int size?)
For BITS_BIG_ENDIAN=1 targets, it is the bit offset to the MSB.
For BITS_BIG_ENDIAN=0 targets, it is the bit offset to the LSB. */
/* The default value of TYPE_CPLUS_SPECIFIC(T) points to the
this shared static structure. */
-extern struct cplus_struct_type cplus_struct_default;
+extern const struct cplus_struct_type cplus_struct_default;
extern void
allocate_cplus_struct_type PARAMS ((struct type *));
extern struct type *builtin_type_long_double;
extern struct type *builtin_type_complex;
extern struct type *builtin_type_double_complex;
+extern struct type *builtin_type_string;
/* This type represents a type that was unrecognized in symbol
read-in. */
extern struct type *builtin_type_m2_real;
extern struct type *builtin_type_m2_bool;
-/* start-sanitize-chill */
/* Chill types */
extern struct type *builtin_type_chill_bool;
extern struct type *builtin_type_chill_long;
extern struct type *builtin_type_chill_ulong;
extern struct type *builtin_type_chill_real;
-/* end-sanitize-chill */
/* LONG_LONG is defined if the host has "long long". */
lookup_function_type PARAMS ((struct type *));
extern struct type *
-create_array_type PARAMS ((struct type *, struct type *, struct type *, int,
- int));
+create_range_type PARAMS ((struct type *, struct type *, int, int));
+
+extern struct type *
+create_array_type PARAMS ((struct type *, struct type *, struct type *));
+
+extern struct type *
+create_string_type PARAMS ((struct type *, struct type *));
extern struct type *
lookup_unsigned_typename PARAMS ((char *));