* defs.h, valprint.c: Make longest_to_int a function not a macro.
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 18 Feb 1994 17:47:43 +0000 (17:47 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 18 Feb 1994 17:47:43 +0000 (17:47 +0000)
Only test against INT_MIN if a LONGEST is bigger than an int.

gdb/ChangeLog
gdb/defs.h
gdb/valprint.c

index 610bdcd4063db40f6fdb9b918a9b852e659c6978..4dac5255ae900b0150f0853c8c46d1c2df72dac8 100644 (file)
@@ -1,5 +1,8 @@
 Fri Feb 18 08:26:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       * defs.h, valprint.c: Make longest_to_int a function not a macro.
+       Only test against INT_MIN if a LONGEST is bigger than an int.
+
        * README: Change GhostScript to Ghostscript.
 
 Fri Feb 18 07:30:55 1994  Jim Kingdon  (kingdon@cygnus.com)
index 0675aaf10516790168cd5917aac07e01a3a5b480..1a49d8c01fe5aff451ec36b0aaee59e450f02a65 100644 (file)
@@ -556,8 +556,7 @@ enum val_prettyprint
    arguments to a function, number in a value history, register number, etc.)
    where the value must not be larger than can fit in an int.  */
 
-#define longest_to_int(x) (((x) > INT_MAX || (x) < INT_MIN) \
-                          ? (error ("Value out of range."),0) : (int) (x))
+extern int longest_to_int PARAMS ((LONGEST));
 
 /* Assorted functions we can declare, now that const and volatile are 
    defined.  */
index a3242fd0821819b146bffcbe8d74e37e3c08b108..c5bd039db585223c799e769a94ac7aef9e7c3ea2 100644 (file)
@@ -277,9 +277,12 @@ val_print_type_code_int (type, valaddr, stream)
 #endif
          if (len <= sizeof (LONGEST))
            {
-             /* We can print it in decimal.  */
+             /* The most significant bytes are zero, so we can just get
+                the least significant sizeof (LONGEST) bytes and print it
+                in decimal.  */
              print_longest (stream, 'u', 0,
-                           unpack_long (BUILTIN_TYPE_LONGEST, first_addr));
+                            extract_unsigned_integer (first_addr,
+                                                      sizeof (LONGEST)));
            }
          else
            {
@@ -424,6 +427,28 @@ print_longest (stream, format, use_local, val_long)
 #endif /* !PRINTF_HAS_LONG_LONG */
 }
 
+/* This used to be a macro, but I don't think it is called often enough
+   to merit such treatment.  */
+/* Convert a LONGEST to an int.  This is used in contexts (e.g. number of
+   arguments to a function, number in a value history, register number, etc.)
+   where the value must not be larger than can fit in an int.  */
+
+int
+longest_to_int (arg)
+     LONGEST arg;
+{
+
+  /* This check is in case a system header has botched the
+     definition of INT_MIN, like on BSDI.  */
+  if (sizeof (LONGEST) <= sizeof (int))
+    return arg;
+
+  if (arg > INT_MAX || arg < INT_MIN)
+    error ("Value out of range.");
+
+  return arg;
+}
+
 /* Print a floating point value of type TYPE, pointed to in GDB by VALADDR,
    on STREAM.  */