Add TYPE_FLOATFORMAT().
authorAndrew Cagney <cagney@redhat.com>
Thu, 23 Aug 2001 01:09:38 +0000 (01:09 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 23 Aug 2001 01:09:38 +0000 (01:09 +0000)
gdb/ChangeLog
gdb/gdbtypes.c
gdb/gdbtypes.h

index 7ed9886b33c67d165cc6dd604fa34786d68c81a7..83689df043d585e771da50ef7e2ddd3374bb9c2d 100644 (file)
@@ -1,3 +1,12 @@
+2001-08-22  Andrew Cagney  <ac131313@redhat.com>
+
+       * gdbtypes.c (build_gdbtypes): Initialize TYPE_FLOATFORMAT field
+       of builtin_type_float, builtin_type_double and
+       builtin_type_long_double.
+       (recursive_dump_type): Print the floatformat name.
+       * gdbtypes.h (struct type): Add type_specific field floatformat.
+       (TYPE_FLOATFORMAT): Define
+
 2001-08-21  Keith Seitz  <keiths@redhat.com>
 
        * printcmd.c (print_insn): Use the given stream for
index cfb5ffc4d25bec1f8a6f6daae9e3af436a904ced..5c9e6cf417be0a3b2e880d946832ade37e02ec48 100644 (file)
@@ -2769,6 +2769,16 @@ recursive_dump_type (struct type *type, int spaces)
       print_cplus_stuff (type, spaces);
       break;
 
+    case TYPE_CODE_FLT:
+      printfi_filtered (spaces, "floatformat ");
+      if (TYPE_FLOATFORMAT (type) == NULL
+         || TYPE_FLOATFORMAT (type)->name == NULL)
+       puts_filtered ("(null)");
+      else
+       puts_filtered (TYPE_FLOATFORMAT (type)->name);
+      puts_filtered ("\n");
+      break;
+
     default:
       /* We have to pick one of the union types to be able print and test
          the value.  Pick cplus_struct_type, even though we know it isn't
@@ -2848,14 +2858,17 @@ build_gdbtypes (void)
     init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
               0,
               "float", (struct objfile *) NULL);
+  TYPE_FLOATFORMAT (builtin_type_float) = TARGET_FLOAT_FORMAT;
   builtin_type_double =
     init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
               0,
               "double", (struct objfile *) NULL);
+  TYPE_FLOATFORMAT (builtin_type_double) = TARGET_DOUBLE_FORMAT;
   builtin_type_long_double =
     init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
               0,
               "long double", (struct objfile *) NULL);
+  TYPE_FLOATFORMAT (builtin_type_long_double) = TARGET_LONG_DOUBLE_FORMAT;
   builtin_type_complex =
     init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
               0,
index 6869a604bfcd2509eccd36e10d1d046d553dfed8..4d47112a1883b0adea5055529bdcbeec877c739a 100644 (file)
@@ -413,6 +413,11 @@ struct type
 
        struct cplus_struct_type *cplus_stuff;
 
+       /* FLOATFORMAT is for TYPE_CODE_FLT.  It is a pointer to the
+           floatformat object that describes the floating-point value
+           that resides within the type.  */
+
+       const struct floatformat *floatformat;
       }
     type_specific;
   };
@@ -722,6 +727,7 @@ extern void allocate_cplus_struct_type (struct type *);
 #define        TYPE_TYPE_SPECIFIC(thistype) (thistype)->type_specific
 #define TYPE_ARG_TYPES(thistype) (thistype)->type_specific.arg_types
 #define TYPE_CPLUS_SPECIFIC(thistype) (thistype)->type_specific.cplus_stuff
+#define TYPE_FLOATFORMAT(thistype) (thistype)->type_specific.floatformat
 #define TYPE_BASECLASS(thistype,index) (thistype)->fields[index].type
 #define TYPE_N_BASECLASSES(thistype) TYPE_CPLUS_SPECIFIC(thistype)->n_baseclasses
 #define TYPE_BASECLASS_NAME(thistype,index) (thistype)->fields[index].name