/* 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.
/* 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
return form;
}
-/* Converts a number to 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 (unsigned long num)
+local_hex_string (LONGEST 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
- string. Returns a pointer to this string. */
-char *
-local_hex_string_custom (unsigned long num, char *pre)
-{
- 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
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;
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 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". */
if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
>= 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)
}
}
return res2;
-#endif
-} /* longest_local_hex_string_custom */
+} /* local_hex_string_custom */
/* Returns the appropriate printf format for octal
numbers. */
}
}
-/* 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
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
};
"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);
"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,
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);