* configure.tgt (i[3456]86-*-unixware*, i[3456]86-*-unixware2*):
[deliverable/binutils-gdb.git] / gdb / language.c
index 6d70e81f4fff83c040616f7afc08ea7460ea6a52..1bfba98c86dfe7d4dfdbb303b68273e9e14619ee 100644 (file)
@@ -1,5 +1,5 @@
 /* Multiple source language support for GDB.
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
    Free Software Foundation, Inc.
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
@@ -37,7 +37,6 @@
 #include "gdbtypes.h"
 #include "value.h"
 #include "gdbcmd.h"
-#include "frame.h"
 #include "expression.h"
 #include "language.h"
 #include "target.h"
@@ -97,11 +96,10 @@ static int unk_lang_val_print (struct type *, char *, int, CORE_ADDR,
                               struct ui_file *, int, int, int,
                               enum val_prettyprint);
 
-static int unk_lang_value_print (value_ptr, struct ui_file *, int, enum val_prettyprint);
+static int unk_lang_value_print (struct value *, struct ui_file *, int, enum val_prettyprint);
 
 /* Forward declaration */
 extern const struct language_defn unknown_language_defn;
-extern char *warning_pre_print;
 
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
@@ -538,7 +536,7 @@ language_info (int quietly)
 #if 0                          /* Currently unused */
 
 struct type *
-binop_result_type (value_ptr v1, value_ptr v2)
+binop_result_type (struct value *v1, struct value *v2)
 {
   int size, uns;
   struct type *t1 = check_typedef (VALUE_TYPE (v1));
@@ -597,57 +595,12 @@ local_hex_format_custom (char *pre)
   return form;
 }
 
-#if 0
-/* FIXME: cagney/2000-03-04: This function does not appear to be used.
-   It can be deleted once 5.0 has been released. */
-/* FIXME: cagney/2000-03-04: This code assumes that the compiler
-   supports ``long long''. */
-/* Converts a number to hexadecimal (without leading "0x") and stores it in a
-   static string.  Returns a pointer to this string. */
-
-char *
-longest_raw_hex_string (LONGEST num)
-{
-  static char res_longest_raw_hex_string[50];
-  long long ll = num;          /* MERGEBUG ?? see below */
-  res_longest_raw_hex_string[0] = 0;
-  /* MERGEBUG ?? As a quick fix I am replacing this with sprintf 
-     strcat_address_numeric (num, 0, res_longest_raw_hex_string, 50); 
-   */
-
-  sprintf (res_longest_raw_hex_string, "%llx", ll);
-  return res_longest_raw_hex_string;
-}
-#endif
-
-/* Converts a number to hexadecimal and stores it in a static
-   string.  Returns a pointer to this string. */
-char *
-local_hex_string (unsigned long num)
-{
-  static char res[50];
-
-  sprintf (res, local_hex_format (), num);
-  return res;
-}
-
-/* Converts a LONGEST number to hexadecimal and stores it in a static
-   string.  Returns a pointer to this string. */
-char *
-longest_local_hex_string (LONGEST num)
-{
-  return longest_local_hex_string_custom (num, "l");
-}
-
-/* Converts a number to custom hexadecimal and stores it in a static
+/* Converts a LONGEST to custom hexadecimal and stores it in a static
    string.  Returns a pointer to this string. */
 char *
-local_hex_string_custom (unsigned long num, char *pre)
+local_hex_string (LONGEST num)
 {
-  static char res[50];
-
-  sprintf (res, local_hex_format_custom (pre), num);
-  return res;
+  return local_hex_string_custom (num, "l");
 }
 
 /* Converts a LONGEST number to custom hexadecimal and stores it in a static
@@ -655,12 +608,11 @@ local_hex_string_custom (unsigned long num, char *pre)
    should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
 
 char *
-longest_local_hex_string_custom (LONGEST num, char *width)
+local_hex_string_custom (LONGEST num, char *width)
 {
 #define RESULT_BUF_LEN 50
   static char res2[RESULT_BUF_LEN];
   char format[RESULT_BUF_LEN];
-#if !defined (PRINTF_HAS_LONG_LONG)
   int field_width;
   int num_len;
   int num_pad_chars;
@@ -668,39 +620,11 @@ longest_local_hex_string_custom (LONGEST num, char *width)
   int pad_on_left;
   char *parse_ptr;
   char temp_nbr_buf[RESULT_BUF_LEN];
-#endif
 
-#ifndef CC_HAS_LONG_LONG
-  /* If there is no long long, then LONGEST should be just long and we
-     can use local_hex_string_custom 
-   */
-  return local_hex_string_custom ((unsigned long) num, width);
-#elif defined (PRINTF_HAS_LONG_LONG)
-  /* Just use printf.  */
-  strcpy (format, local_hex_format_prefix ()); /* 0x */
-  strcat (format, "%");
-  strcat (format, width);      /* e.g. "08l" */
-  strcat (format, "l");                /* need "ll" for long long */
-  strcat (format, local_hex_format_specifier ());      /* "x" */
-  strcat (format, local_hex_format_suffix ()); /* "" */
-  sprintf (res2, format, num);
-  return res2;
-#else /* !defined (PRINTF_HAS_LONG_LONG) */
-  /* Use strcat_address_numeric to print the number into a string, then
+  /* Use phex_nz to print the number into a string, then
      build the result string from local_hex_format_prefix, padding and 
      the hex representation as indicated by "width".  */
-
-  temp_nbr_buf[0] = 0;
-  /* With use_local == 0, we don't get the leading "0x" prefix. */
-  /* MERGEBUG ?? As a quick fix I am replacing this call to
-     strcat_address_numeric with sprintf
-     strcat_address_numeric(num, 0, temp_nbr_buf, RESULT_BUF_LEN);
-   */
-
-  {
-    long long ll = num;
-    sprintf (temp_nbr_buf, "%llx", ll);
-  }
+  strcpy (temp_nbr_buf, phex_nz (num, sizeof (num)));
   /* parse width */
   parse_ptr = width;
   pad_on_left = 1;
@@ -721,9 +645,9 @@ longest_local_hex_string_custom (LONGEST num, char *width)
   num_pad_chars = field_width - strlen (temp_nbr_buf); /* possibly negative */
 
   if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
-      < RESULT_BUF_LEN)                /* paranoia */
+      >= RESULT_BUF_LEN)               /* paranoia */
     internal_error (__FILE__, __LINE__,
-                   "longest_local_hex_string_custom: insufficient space to store result");
+                   "local_hex_string_custom: insufficient space to store result");
 
   strcpy (res2, local_hex_format_prefix ());
   if (pad_on_left)
@@ -744,9 +668,8 @@ longest_local_hex_string_custom (LONGEST num, char *width)
        }
     }
   return res2;
-#endif
 
-}                              /* longest_local_hex_string_custom */
+}                              /* local_hex_string_custom */
 
 /* Returns the appropriate printf format for octal
    numbers. */
@@ -1050,7 +973,7 @@ lang_bool_type (void)
 
 /* Returns non-zero if the value VAL represents a true value. */
 int
-value_true (value_ptr val)
+value_true (struct value *val)
 {
   /* 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
@@ -1067,7 +990,7 @@ value_true (value_ptr val)
 #if 0                          /* Currently unused */
 
 void
-binop_type_check (value_ptr arg1, value_ptr arg2, int op)
+binop_type_check (struct value *arg1, struct value *arg2, int op)
 {
   struct type *t1, *t2;
 
@@ -1269,47 +1192,63 @@ op_error (char *fmt, enum exp_opcode op, int fatal)
     }
 }
 
-/* These are called when a language fails a type- or range-check.
-   The first argument should be a printf()-style format string, and
-   the rest of the arguments should be its arguments.  If
-   [type|range]_check is [type|range]_check_on, then return_to_top_level()
-   is called in the style of error ().  Otherwise, the message is prefixed
-   by the value of warning_pre_print and we do not return to the top level. */
+/* These are called when a language fails a type- or range-check.  The
+   first argument should be a printf()-style format string, and the
+   rest of the arguments should be its arguments.  If
+   [type|range]_check is [type|range]_check_on, an error is printed;
+   if [type|range]_check_warn, a warning; otherwise just the
+   message. */
 
 void
-type_error (char *string,...)
+type_error (const char *string,...)
 {
   va_list args;
   va_start (args, string);
 
-  if (type_check == type_check_warn)
-    fprintf_filtered (gdb_stderr, warning_pre_print);
-  else
-    error_begin ();
-
-  vfprintf_filtered (gdb_stderr, string, args);
-  fprintf_filtered (gdb_stderr, "\n");
+  switch (type_check)
+    {
+    case type_check_warn:
+      vwarning (string, args);
+      break;
+    case type_check_on:
+      verror (string, args);
+      break;
+    case type_check_off:
+      /* FIXME: cagney/2002-01-30: Should this function print anything
+         when type error is off?  */
+      vfprintf_filtered (gdb_stderr, string, args);
+      fprintf_filtered (gdb_stderr, "\n");
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "bad switch");
+    }
   va_end (args);
-  if (type_check == type_check_on)
-    return_to_top_level (RETURN_ERROR);
 }
 
 void
-range_error (char *string,...)
+range_error (const char *string,...)
 {
   va_list args;
   va_start (args, string);
 
-  if (range_check == range_check_warn)
-    fprintf_filtered (gdb_stderr, warning_pre_print);
-  else
-    error_begin ();
-
-  vfprintf_filtered (gdb_stderr, string, args);
-  fprintf_filtered (gdb_stderr, "\n");
+  switch (range_check)
+    {
+    case range_check_warn:
+      vwarning (string, args);
+      break;
+    case range_check_on:
+      verror (string, args);
+      break;
+    case range_check_off:
+      /* FIXME: cagney/2002-01-30: Should this function print anything
+         when range error is off?  */
+      vfprintf_filtered (gdb_stderr, string, args);
+      fprintf_filtered (gdb_stderr, "\n");
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "bad switch");
+    }
   va_end (args);
-  if (range_check == range_check_on)
-    return_to_top_level (RETURN_ERROR);
 }
 \f
 
@@ -1458,13 +1397,13 @@ unk_lang_val_print (struct type *type, char *valaddr, int embedded_offset,
 }
 
 static int
-unk_lang_value_print (value_ptr val, struct ui_file *stream, int format,
+unk_lang_value_print (struct value *val, struct ui_file *stream, int format,
                      enum val_prettyprint pretty)
 {
   error ("internal error - unimplemented function unk_lang_value_print called.");
 }
 
-static struct type **CONST_PTR (unknown_builtin_types[]) =
+static struct type **const (unknown_builtin_types[]) =
 {
   0
 };
@@ -1575,17 +1514,17 @@ _initialize_language (void)
                     "Set the current source language.",
                     &setlist);
   show = add_show_from_set (set, &showlist);
-  set->function.cfunc = set_language_command;
-  show->function.cfunc = show_language_command;
+  set_cmd_cfunc (set, set_language_command);
+  set_cmd_cfunc (show, show_language_command);
 
   add_prefix_cmd ("check", no_class, set_check,
-                 "Set the status of the type/range checker",
+                 "Set the status of the type/range checker.",
                  &setchecklist, "set check ", 0, &setlist);
   add_alias_cmd ("c", "check", no_class, 1, &setlist);
   add_alias_cmd ("ch", "check", no_class, 1, &setlist);
 
   add_prefix_cmd ("check", no_class, show_check,
-                 "Show the status of the type/range checker",
+                 "Show the status of the type/range checker.",
                  &showchecklist, "show check ", 0, &showlist);
   add_alias_cmd ("c", "check", no_class, 1, &showlist);
   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
@@ -1595,16 +1534,16 @@ _initialize_language (void)
                     "Set type checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
-  set->function.cfunc = set_type_command;
-  show->function.cfunc = show_type_command;
+  set_cmd_cfunc (set, set_type_command);
+  set_cmd_cfunc (show, show_type_command);
 
   set = add_set_cmd ("range", class_support, var_string_noescape,
                     (char *) &range,
                     "Set range checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
-  set->function.cfunc = set_range_command;
-  show->function.cfunc = show_range_command;
+  set_cmd_cfunc (set, set_range_command);
+  set_cmd_cfunc (show, show_range_command);
 
   set = add_set_cmd ("case-sensitive", class_support, var_string_noescape,
                      (char *) &case_sensitive,
@@ -1612,8 +1551,8 @@ _initialize_language (void)
 For Fortran the default is off; for other languages the default is on.",
                      &setlist);
   show = add_show_from_set (set, &showlist);
-  set->function.cfunc = set_case_command;
-  show->function.cfunc = show_case_command;
+  set_cmd_cfunc (set, set_case_command);
+  set_cmd_cfunc (show, show_case_command);
 
   add_language (&unknown_language_defn);
   add_language (&local_language_defn);
This page took 0.029319 seconds and 4 git commands to generate.