* doublest.h (DOUBLEST): Use long double only if we can scan
authorAlexandre Oliva <aoliva@redhat.com>
Tue, 14 Feb 2006 18:45:14 +0000 (18:45 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Tue, 14 Feb 2006 18:45:14 +0000 (18:45 +0000)
it in.  Undefine HAVE_LONG_DOUBLE otherwise.
(DOUBLEST_FORMAT): New.
* c-exp.y (parse_number): Use it.
* jv-exp.y (parse_number): Likewise.
* objc-exp.y (parse_number): Likewise.
* p-exp.y (parse_number): Likewise.
* varobj.c (free_variable): Silence type-punning warnings.
* tui/tui-data.h (struct tui_list): Change type of list member.
* tui/tui-data.c: Remove no-longer-needed type casts.
(source_windows): Silence type-punning warnings.
* tui/tui-stack.c, tui/tui-win.c, tui/tui-winsource.c: Likewise.

12 files changed:
gdb/ChangeLog
gdb/c-exp.y
gdb/doublest.h
gdb/jv-exp.y
gdb/objc-exp.y
gdb/p-exp.y
gdb/tui/tui-data.c
gdb/tui/tui-data.h
gdb/tui/tui-stack.c
gdb/tui/tui-win.c
gdb/tui/tui-winsource.c
gdb/varobj.c

index b0fefb1..c70577d 100644 (file)
@@ -1,3 +1,18 @@
+2006-02-14  Alexandre Oliva  <aoliva@redhat.com>
+
+       * doublest.h (DOUBLEST): Use long double only if we can scan
+       it in.  Undefine HAVE_LONG_DOUBLE otherwise.
+       (DOUBLEST_FORMAT): New.
+       * c-exp.y (parse_number): Use it.
+       * jv-exp.y (parse_number): Likewise.
+       * objc-exp.y (parse_number): Likewise.
+       * p-exp.y (parse_number): Likewise.
+       * varobj.c (free_variable): Silence type-punning warnings.
+       * tui/tui-data.h (struct tui_list): Change type of list member.
+       * tui/tui-data.c: Remove no-longer-needed type casts.
+       (source_windows): Silence type-punning warnings.
+       * tui/tui-stack.c, tui/tui-win.c, tui/tui-winsource.c: Likewise.
+
 2006-02-13  Mark Kettenis  <kettenis@gnu.org>
 
        Fix PR breakpoints/2080.
index 8758a7d..b56613f 100644 (file)
@@ -1080,24 +1080,8 @@ parse_number (p, len, parsed_float, putithere)
       char saved_char = p[len];
 
       p[len] = 0;      /* null-terminate the token */
-
-      if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       num = sscanf (p, "%g%s", (float *) &putithere->typed_val_float.dval,s);
-      else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       num = sscanf (p, "%lg%s", (double *) &putithere->typed_val_float.dval,s);
-      else
-       {
-#ifdef SCANF_HAS_LONG_DOUBLE
-         num = sscanf (p, "%Lg%s", &putithere->typed_val_float.dval,s);
-#else
-         /* Scan it into a double, then assign it to the long double.
-            This at least wins with values representable in the range
-            of doubles. */
-         double temp;
-         num = sscanf (p, "%lg%s", &temp,s);
-         putithere->typed_val_float.dval = temp;
-#endif
-       }
+      num = sscanf (p, DOUBLEST_FORMAT "%s",
+                   &putithere->typed_val_float.dval, s);
       p[len] = saved_char;     /* restore the input stream */
 
       if (num == 1)
index c10b3ea..1a479b8 100644 (file)
@@ -48,10 +48,15 @@ struct floatformat;
    host's `long double'.  In general, we'll probably reduce the precision of
    any such values and print a warning.  */
 
-#ifdef HAVE_LONG_DOUBLE
+#if defined HAVE_LONG_DOUBLE && defined SCANF_HAS_LONG_DOUBLE
 typedef long double DOUBLEST;
+# define DOUBLEST_FORMAT "%Lg"
 #else
 typedef double DOUBLEST;
+# define DOUBLEST_FORMAT "%g"
+/* If we can't scan or print long double, we don't want to use it
+   anywhere.  */
+# undef HAVE_LONG_DOUBLE
 #endif
 
 extern void floatformat_to_doublest (const struct floatformat *,
index 4f9e77f..1ed027c 100644 (file)
@@ -713,23 +713,8 @@ parse_number (p, len, parsed_float, putithere)
       char saved_char = p[len];
 
       p[len] = 0;      /* null-terminate the token */
-      if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval, &c);
-      else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval, &c);
-      else
-       {
-#ifdef SCANF_HAS_LONG_DOUBLE
-         num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval, &c);
-#else
-         /* Scan it into a double, then assign it to the long double.
-            This at least wins with values representable in the range
-            of doubles. */
-         double temp;
-         num = sscanf (p, "%lg%c", &temp, &c);
-         putithere->typed_val_float.dval = temp;
-#endif
-       }
+      num = sscanf (p, DOUBLEST_FORMAT "%c",
+                   &putithere->typed_val_float.dval, &c);
       p[len] = saved_char;     /* restore the input stream */
       if (num != 1)            /* check scanf found ONLY a float ... */
        return ERROR;
index 93ccea3..f150313 100644 (file)
@@ -1025,23 +1025,8 @@ parse_number (p, len, parsed_float, putithere)
 
       /* It's a float since it contains a point or an exponent.  */
 
-      if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       sscanf (p, "%g", (float *)&putithere->typed_val_float.dval);
-      else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       sscanf (p, "%lg", (double *)&putithere->typed_val_float.dval);
-      else
-       {
-#ifdef PRINTF_HAS_LONG_DOUBLE
-         sscanf (p, "%Lg", &putithere->typed_val_float.dval);
-#else
-         /* Scan it into a double, then assign it to the long double.
-            This at least wins with values representable in the range
-            of doubles.  */
-         double temp;
-         sscanf (p, "%lg", &temp);
-         putithere->typed_val_float.dval = temp;
-#endif
-       }
+      sscanf (p, DOUBLEST_FORMAT "%c",
+             &putithere->typed_val_float.dval, &c);
 
       /* See if it has `f' or `l' suffix (float or long double).  */
 
index 68d8c08..37558b4 100644 (file)
@@ -799,23 +799,8 @@ parse_number (p, len, parsed_float, putithere)
       char saved_char = p[len];
 
       p[len] = 0;      /* null-terminate the token */
-      if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
-       num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c);
-      else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
-       num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
-      else
-       {
-#ifdef SCANF_HAS_LONG_DOUBLE
-         num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
-#else
-         /* Scan it into a double, then assign it to the long double.
-            This at least wins with values representable in the range
-            of doubles. */
-         double temp;
-         num = sscanf (p, "%lg%c", &temp,&c);
-         putithere->typed_val_float.dval = temp;
-#endif
-       }
+      num = sscanf (p, DOUBLEST_FORMAT "%c",
+                   &putithere->typed_val_float.dval, &c);
       p[len] = saved_char;     /* restore the input stream */
       if (num != 1)            /* check scanf found ONLY a float ... */
        return ERROR;
index 71c16f9..9ef342a 100644 (file)
@@ -44,7 +44,7 @@ static int term_height, term_width;
 static struct tui_gen_win_info _locator;
 static struct tui_gen_win_info exec_info[2];
 static struct tui_win_info * src_win_list[2];
-static struct tui_list source_windows = {(void **) src_win_list, 0};
+static struct tui_list source_windows = {src_win_list, 0};
 static int default_tab_len = DEFAULT_TAB_LEN;
 static struct tui_win_info * win_with_focus = (struct tui_win_info *) NULL;
 static struct tui_layout_def layout_def =
@@ -182,7 +182,7 @@ tui_clear_source_windows_detail (void)
   int i;
 
   for (i = 0; i < (tui_source_windows ())->count; i++)
-    tui_clear_win_detail ((struct tui_win_info *) (tui_source_windows ())->list[i]);
+    tui_clear_win_detail ((tui_source_windows ())->list[i]);
 }
 
 
@@ -782,7 +782,7 @@ tui_free_all_source_wins_content (void)
 
   for (i = 0; i < (tui_source_windows ())->count; i++)
     {
-      struct tui_win_info * win_info = (struct tui_win_info *) (tui_source_windows ())->list[i];
+      struct tui_win_info * win_info = (tui_source_windows ())->list[i];
 
       if (win_info != NULL)
        {
index ba9f3fa..67f2ff5 100644 (file)
@@ -110,7 +110,7 @@ enum tui_scroll_direction
 /* General list struct.  */
 struct tui_list
 {
-  void **list;
+  struct tui_win_info **list;
   int count;
 };
 
index bb6eeda..a1e972c 100644 (file)
@@ -343,7 +343,7 @@ tui_show_frame_info (struct frame_info *fi)
       for (i = 0; i < (tui_source_windows ())->count; i++)
        {
          union tui_which_element *item;
-         win_info = (struct tui_win_info *) (tui_source_windows ())->list[i];
+         win_info = (tui_source_windows ())->list[i];
 
          item = &((struct tui_win_element *) locator->content[0])->which_element;
          if (win_info == TUI_SRC_WIN)
@@ -401,7 +401,7 @@ tui_show_frame_info (struct frame_info *fi)
       tui_show_locator_content ();
       for (i = 0; i < (tui_source_windows ())->count; i++)
        {
-         win_info = (struct tui_win_info *) (tui_source_windows ())->list[i];
+         win_info = (tui_source_windows ())->list[i];
          tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
          tui_update_exec_info (win_info);
        }
index 87ab925..9dd7d4a 100644 (file)
@@ -1119,7 +1119,7 @@ tui_adjust_win_heights (struct tui_win_info * primary_win_info, int new_height)
              make_invisible_and_set_new_height (primary_win_info, new_height);
              if (primary_win_info->generic.type == CMD_WIN)
                {
-                 win_info = (struct tui_win_info *) (tui_source_windows ())->list[0];
+                 win_info = (tui_source_windows ())->list[0];
                  src_win_info = win_info;
                }
              else
@@ -1148,7 +1148,7 @@ tui_adjust_win_heights (struct tui_win_info * primary_win_info, int new_height)
              else
                {
                  first_win = TUI_DATA_WIN;
-                 second_win = (struct tui_win_info *) (tui_source_windows ())->list[0];
+                 second_win = (tui_source_windows ())->list[0];
                }
              if (primary_win_info == TUI_CMD_WIN)
                {               /*
@@ -1393,7 +1393,7 @@ new_height_ok (struct tui_win_info * primary_win_info, int new_height)
              struct tui_win_info * win_info;
 
              if (primary_win_info == TUI_CMD_WIN)
-               win_info = (struct tui_win_info *) (tui_source_windows ())->list[0];
+               win_info = (tui_source_windows ())->list[0];
              else
                win_info = TUI_CMD_WIN;
              ok = ((new_height +
@@ -1414,7 +1414,7 @@ new_height_ok (struct tui_win_info * primary_win_info, int new_height)
          else
            {
              first_win = TUI_DATA_WIN;
-             second_win = (struct tui_win_info *) (tui_source_windows ())->list[0];
+             second_win = (tui_source_windows ())->list[0];
            }
          /*
             ** We could simply add all the heights to obtain the same result
@@ -1543,7 +1543,7 @@ parse_scrolling_args (char *arg, struct tui_win_info * * win_to_scroll,
            error (_("Invalid window specified. \n\
 The window name specified must be valid and visible.\n"));
          else if (*win_to_scroll == TUI_CMD_WIN)
-           *win_to_scroll = (struct tui_win_info *) (tui_source_windows ())->list[0];
+           *win_to_scroll = (tui_source_windows ())->list[0];
        }
       xfree (buf);
     }
index 5b498df..ca084ed 100644 (file)
@@ -160,7 +160,7 @@ tui_update_source_windows_with_addr (CORE_ADDR addr)
 
       for (i = 0; i < (tui_source_windows ())->count; i++)
        {
-         struct tui_win_info * win_info = (struct tui_win_info *) (tui_source_windows ())->list[i];
+         struct tui_win_info * win_info = (tui_source_windows ())->list[i];
 
          tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
          tui_clear_exec_info_content (win_info);
@@ -384,7 +384,7 @@ tui_update_all_breakpoint_info (void)
 
   for (i = 0; i < list->count; i++)
     {
-      struct tui_win_info * win = (struct tui_win_info *) list->list[i];
+      struct tui_win_info * win = list->list[i];
 
       if (tui_update_breakpoint_info (win, FALSE))
         {
index c4e4309..d4c1fbf 100644 (file)
@@ -1374,7 +1374,7 @@ free_variable (struct varobj *var)
   /* Free the expression if this is a root variable. */
   if (var->root->rootvar == var)
     {
-      free_current_contents ((char **) &var->root->exp);
+      free_current_contents (&var->root->exp);
       xfree (var->root);
     }