mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
* language.h (language_format_info): New structure to bundle
local formatting information. * language.h (language_defn): Replace individual format info with language_format_info structs. * language.h (local_*_format, local_*_format_prefix, local_*_format_specifier, local_*_format_suffix): New macros for binary/octal/decimal/hex formats to access info elements. * c-exp.y (c_language_defn): Update for new format handling. * m2-exp.y (m2_language_defn): Update for new format handling. * dbxread.c (language.h): Include for partial-stab.h use. * defs.h (local_hex_format, local_hex_format_custom, local_hex_string, local_hex_string_custom): Move to language.h. * language.c (local_hex_format_custom, local_hex_string, local_hex_string_custom, local_octal_format_custom): Use new format handling. * language.c (unknown_language_defn, auto_language_defn, local_language_defn): Update for new format handling. * printcmd.c (print_scalar_formatted): Use new macros to access decimal and binary format info for printing. **** start-sanitize-chill **** * c-exp.y (chill_language_defn): Update for new format handling. * ch-exp.y (CHARACTER_LITERAL): Add support to yylex. * ch-exp.y (match_integer_literal): Add function. * ch-exp.y (builtin_type_chill_char): Add definition. * gdbtypes.h (builtin_type_chill_char): Add declaration. **** end-sanitize-chill ****
This commit is contained in:
parent
e1b91f0b1a
commit
2e66cf7d6d
@ -1,3 +1,32 @@
|
||||
Wed Nov 18 14:27:47 1992 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
* language.h (language_format_info): New structure to bundle
|
||||
local formatting information.
|
||||
* language.h (language_defn): Replace individual format info
|
||||
with language_format_info structs.
|
||||
* language.h (local_*_format, local_*_format_prefix,
|
||||
local_*_format_specifier, local_*_format_suffix): New macros
|
||||
for binary/octal/decimal/hex formats to access info elements.
|
||||
* c-exp.y (c_language_defn): Update for new format handling.
|
||||
* m2-exp.y (m2_language_defn): Update for new format handling.
|
||||
* dbxread.c (language.h): Include for partial-stab.h use.
|
||||
* defs.h (local_hex_format, local_hex_format_custom,
|
||||
local_hex_string, local_hex_string_custom): Move to language.h.
|
||||
* language.c (local_hex_format_custom, local_hex_string,
|
||||
local_hex_string_custom, local_octal_format_custom): Use new
|
||||
format handling.
|
||||
* language.c (unknown_language_defn, auto_language_defn,
|
||||
local_language_defn): Update for new format handling.
|
||||
* printcmd.c (print_scalar_formatted): Use new macros
|
||||
to access decimal and binary format info for printing.
|
||||
**** start-sanitize-chill ****
|
||||
* c-exp.y (chill_language_defn): Update for new format handling.
|
||||
* ch-exp.y (CHARACTER_LITERAL): Add support to yylex.
|
||||
* ch-exp.y (match_integer_literal): Add function.
|
||||
* ch-exp.y (builtin_type_chill_char): Add definition.
|
||||
* gdbtypes.h (builtin_type_chill_char): Add declaration.
|
||||
**** end-sanitize-chill ****
|
||||
|
||||
Tue Nov 17 11:17:06 1992 Ian Lance Taylor (ian@cygnus.com)
|
||||
|
||||
* tm-rs6000.h (BELIEVE_PCC_PROMOTION): Define, since AIX cc gets
|
||||
|
12
gdb/c-exp.y
12
gdb/c-exp.y
@ -1564,8 +1564,10 @@ const struct language_defn c_language_defn = {
|
||||
&BUILTIN_TYPE_LONGEST, /* longest signed integral type */
|
||||
&BUILTIN_TYPE_UNSIGNED_LONGEST,/* longest unsigned integral type */
|
||||
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
||||
"0x%x", "0x%", "x", /* Hex format, prefix, suffix */
|
||||
"0%o", "0%", "o", /* Octal format, prefix, suffix */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"0%o", "0", "o", ""}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0x%x", "0x", "x", ""}, /* Hex format info */
|
||||
c_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
@ -1581,8 +1583,10 @@ const struct language_defn cplus_language_defn = {
|
||||
&BUILTIN_TYPE_LONGEST, /* longest signed integral type */
|
||||
&BUILTIN_TYPE_UNSIGNED_LONGEST,/* longest unsigned integral type */
|
||||
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
||||
"0x%x", "0x%", "x", /* Hex format, prefix, suffix */
|
||||
"0%o", "0%", "o", /* Octal format, prefix, suffix */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"0%o", "0", "o", ""}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0x%x", "0x", "x", ""}, /* Hex format info */
|
||||
c_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
|
604
gdb/ch-exp.y
604
gdb/ch-exp.y
File diff suppressed because it is too large
Load Diff
@ -493,6 +493,7 @@ extern struct type *builtin_type_m2_bool;
|
||||
/* Chill types */
|
||||
|
||||
extern struct type *builtin_type_chill_bool;
|
||||
extern struct type *builtin_type_chill_char;
|
||||
extern struct type *builtin_type_chill_long;
|
||||
extern struct type *builtin_type_chill_ulong;
|
||||
extern struct type *builtin_type_chill_real;
|
||||
|
@ -483,9 +483,11 @@ local_hex_format_custom(pre)
|
||||
{
|
||||
static char form[50];
|
||||
|
||||
strcpy (form, current_language->la_hex_format_pre);
|
||||
strcpy (form, local_hex_format_prefix ());
|
||||
strcat (form, "%");
|
||||
strcat (form, pre);
|
||||
strcat (form, current_language->la_hex_format_suf);
|
||||
strcat (form, local_hex_format_specifier ());
|
||||
strcat (form, local_hex_format_suffix ());
|
||||
return form;
|
||||
}
|
||||
|
||||
@ -497,7 +499,7 @@ local_hex_string (num)
|
||||
{
|
||||
static char res[50];
|
||||
|
||||
sprintf (res, current_language->la_hex_format, num);
|
||||
sprintf (res, local_hex_format(), num);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -522,9 +524,11 @@ local_octal_format_custom(pre)
|
||||
{
|
||||
static char form[50];
|
||||
|
||||
strcpy (form, current_language->la_octal_format_pre);
|
||||
strcpy (form, local_octal_format_prefix ());
|
||||
strcat (form, "%");
|
||||
strcat (form, pre);
|
||||
strcat (form, current_language->la_octal_format_suf);
|
||||
strcat (form, local_octal_format_specifier ());
|
||||
strcat (form, local_octal_format_suffix ());
|
||||
return form;
|
||||
}
|
||||
|
||||
@ -563,7 +567,10 @@ simple_type(type)
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns non-zero if its argument is of an ordered type. */
|
||||
/* Returns non-zero if its argument is of an ordered type.
|
||||
An ordered type is one in which the elements can be tested for the
|
||||
properties of "greater than", "less than", etc, or for which the
|
||||
operations "increment" or "decrement" make sense. */
|
||||
int
|
||||
ordered_type (type)
|
||||
struct type *type;
|
||||
@ -643,6 +650,9 @@ character_type (type)
|
||||
{
|
||||
switch(current_language->la_language)
|
||||
{
|
||||
/* start-sanitize-chill */
|
||||
case language_chill:
|
||||
/* end-sanitize-chill */
|
||||
case language_m2:
|
||||
return TYPE_CODE(type) != TYPE_CODE_CHAR ? 0 : 1;
|
||||
|
||||
@ -651,10 +661,6 @@ character_type (type)
|
||||
return (TYPE_CODE(type) == TYPE_CODE_INT) &&
|
||||
TYPE_LENGTH(type) == sizeof(char)
|
||||
? 1 : 0;
|
||||
/* start-sanitize-chill */
|
||||
case language_chill:
|
||||
error ("Missing Chill support in function character_type."); /*FIXME*/
|
||||
/* end-sanitize-chill */
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
@ -1106,8 +1112,10 @@ const struct language_defn unknown_language_defn = {
|
||||
&builtin_type_error, /* longest signed integral type */
|
||||
&builtin_type_error, /* longest unsigned integral type */
|
||||
&builtin_type_error, /* longest floating point type */
|
||||
"0x%x", "0x%", "x", /* Hex format, prefix, suffix */
|
||||
"0%o", "0%", "o", /* Octal format, prefix, suffix */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"0%o", "0", "o", ""}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0x%x", "0x", "x", ""}, /* Hex format info */
|
||||
unk_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
@ -1124,8 +1132,10 @@ const struct language_defn auto_language_defn = {
|
||||
&builtin_type_error, /* longest signed integral type */
|
||||
&builtin_type_error, /* longest unsigned integral type */
|
||||
&builtin_type_error, /* longest floating point type */
|
||||
"0x%x", "0x%", "x", /* Hex format, prefix, suffix */
|
||||
"0%o", "0%", "o", /* Octal format, prefix, suffix */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"0%o", "0", "o", ""}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0x%x", "0x", "x", ""}, /* Hex format info */
|
||||
unk_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
@ -1141,8 +1151,10 @@ const struct language_defn local_language_defn = {
|
||||
&builtin_type_error, /* longest signed integral type */
|
||||
&builtin_type_error, /* longest unsigned integral type */
|
||||
&builtin_type_error, /* longest floating point type */
|
||||
"0x%x", "0x%", "x", /* Hex format, prefix, suffix */
|
||||
"0%o", "0%", "o", /* Octal format, prefix, suffix */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"0%o", "0", "o", ""}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0x%x", "0x", "x", ""}, /* Hex format info */
|
||||
unk_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
|
118
gdb/language.h
118
gdb/language.h
@ -64,6 +64,37 @@ extern enum type_mode {type_mode_auto, type_mode_manual} type_mode;
|
||||
extern enum type_check
|
||||
{type_check_off, type_check_warn, type_check_on} type_check;
|
||||
|
||||
/* Information for doing language dependent formatting of printed values. */
|
||||
|
||||
struct language_format_info
|
||||
{
|
||||
/* The format that can be passed directly to standard C printf functions
|
||||
to generate a completely formatted value in the format appropriate for
|
||||
the language. */
|
||||
|
||||
char *la_format;
|
||||
|
||||
/* The prefix to be used when directly printing a value, or constructing
|
||||
a standard C printf format. This generally is everything up to the
|
||||
conversion specification (the part introduced by the '%' character
|
||||
and terminated by the conversion specifier character). */
|
||||
|
||||
char *la_format_prefix;
|
||||
|
||||
/* The conversion specifier. This is generally everything after the
|
||||
field width and precision, typically only a single character such
|
||||
as 'o' for octal format or 'x' for hexadecimal format. */
|
||||
|
||||
char *la_format_specifier;
|
||||
|
||||
/* The suffix to be used when directly printing a value, or constructing
|
||||
a standard C printf format. This generally is everything after the
|
||||
conversion specification (the part introduced by the '%' character
|
||||
and terminated by the conversion specifier character). */
|
||||
|
||||
char *la_format_suffix; /* Suffix for custom format string */
|
||||
};
|
||||
|
||||
/* Structure tying together assorted information about a language. */
|
||||
|
||||
struct language_defn {
|
||||
@ -78,13 +109,15 @@ struct language_defn {
|
||||
struct type **la_longest_int; /* Longest signed integral type */
|
||||
struct type **la_longest_unsigned_int; /* Longest uns integral type */
|
||||
struct type **la_longest_float; /* Longest floating point type */
|
||||
char *la_hex_format; /* Hexadecimal printf format str */
|
||||
char *la_hex_format_pre; /* Prefix for custom format string */
|
||||
char *la_hex_format_suf; /* Suffix for custom format string */
|
||||
char *la_octal_format; /* Octal printf format str */
|
||||
char *la_octal_format_pre; /* Prefix for custom format string */
|
||||
char *la_octal_format_suf; /* Suffix for custom format string */
|
||||
const struct op_print
|
||||
struct language_format_info
|
||||
la_binary_format; /* Base 2 (binary) formats. */
|
||||
struct language_format_info
|
||||
la_octal_format; /* Base 8 (octal) formats. */
|
||||
struct language_format_info
|
||||
la_decimal_format; /* Base 10 (decimal) formats */
|
||||
struct language_format_info
|
||||
la_hex_format; /* Base 16 (hexadecimal) formats */
|
||||
const struct op_print
|
||||
*la_op_print_tab; /* Table for printing expressions */
|
||||
/* Add fields above this point, so the magic number is always last. */
|
||||
long la_magic; /* Magic number for compat checking */
|
||||
@ -141,18 +174,73 @@ set_language PARAMS ((enum language));
|
||||
#define longest_unsigned_int() (*current_language->la_longest_unsigned_int)
|
||||
#define longest_float() (*current_language->la_longest_float)
|
||||
|
||||
/* Hexadecimal number formatting is in defs.h because it is so common
|
||||
throughout GDB. */
|
||||
/* Return a format string for printf that will print a number in one of
|
||||
the local (language-specific) formats. Result is static and is
|
||||
overwritten by the next call. Takes printf options like "08" or "l"
|
||||
(to produce e.g. %08x or %lx). */
|
||||
|
||||
/* Return a format string for printf that will print a number in the local
|
||||
(language-specific) octal format. Result is static and is
|
||||
overwritten by the next call. local_octal_format_custom takes printf
|
||||
options like "08" or "l" (to produce e.g. %08x or %lx). */
|
||||
#define local_binary_format() \
|
||||
(current_language->la_binary_format.la_format)
|
||||
#define local_binary_format_prefix() \
|
||||
(current_language->la_binary_format.la_format_prefix)
|
||||
#define local_binary_format_specifier() \
|
||||
(current_language->la_binary_format.la_format_specifier)
|
||||
#define local_binary_format_suffix() \
|
||||
(current_language->la_binary_format.la_format_suffix)
|
||||
|
||||
#define local_octal_format() (current_language->la_octal_format)
|
||||
#define local_octal_format() \
|
||||
(current_language->la_octal_format.la_format)
|
||||
#define local_octal_format_prefix() \
|
||||
(current_language->la_octal_format.la_format_prefix)
|
||||
#define local_octal_format_specifier() \
|
||||
(current_language->la_octal_format.la_format_specifier)
|
||||
#define local_octal_format_suffix() \
|
||||
(current_language->la_octal_format.la_format_suffix)
|
||||
|
||||
#define local_decimal_format() \
|
||||
(current_language->la_decimal_format.la_format)
|
||||
#define local_decimal_format_prefix() \
|
||||
(current_language->la_decimal_format.la_format_prefix)
|
||||
#define local_decimal_format_specifier() \
|
||||
(current_language->la_decimal_format.la_format_specifier)
|
||||
#define local_decimal_format_suffix() \
|
||||
(current_language->la_decimal_format.la_format_suffix)
|
||||
|
||||
#define local_hex_format() \
|
||||
(current_language->la_hex_format.la_format)
|
||||
#define local_hex_format_prefix() \
|
||||
(current_language->la_hex_format.la_format_prefix)
|
||||
#define local_hex_format_specifier() \
|
||||
(current_language->la_hex_format.la_format_specifier)
|
||||
#define local_hex_format_suffix() \
|
||||
(current_language->la_hex_format.la_format_suffix)
|
||||
|
||||
/* Return a format string for printf that will print a number in one of
|
||||
the local (language-specific) formats. Result is static and is
|
||||
overwritten by the next call. Takes printf options like "08" or "l"
|
||||
(to produce e.g. %08x or %lx). */
|
||||
|
||||
extern char *
|
||||
local_octal_format_custom PARAMS ((char *));
|
||||
local_octal_format_custom PARAMS ((char *)); /* language.c */
|
||||
|
||||
extern char *
|
||||
local_hex_format_custom PARAMS ((char *)); /* language.c */
|
||||
|
||||
/* Return a string that contains a number formatted in one of the local
|
||||
(language-specific) formats. Result is static and is overwritten by
|
||||
the next call. Takes printf options like "08" or "l". */
|
||||
|
||||
extern char *
|
||||
local_octal_string PARAMS ((int)); /* language.c */
|
||||
|
||||
extern char *
|
||||
local_octal_string_custom PARAMS ((int, char *));/* language.c */
|
||||
|
||||
extern char *
|
||||
local_hex_string PARAMS ((int)); /* language.c */
|
||||
|
||||
extern char *
|
||||
local_hex_string_custom PARAMS ((int, char *)); /* language.c */
|
||||
|
||||
/* Type predicates */
|
||||
|
||||
|
10
gdb/m2-exp.y
10
gdb/m2-exp.y
@ -1228,10 +1228,12 @@ const struct language_defn m2_language_defn = {
|
||||
m2_parse, /* parser */
|
||||
m2_error, /* parser error function */
|
||||
&builtin_type_m2_int, /* longest signed integral type */
|
||||
&builtin_type_m2_card, /* longest unsigned integral type */
|
||||
&builtin_type_m2_real, /* longest floating point type */
|
||||
"0%XH", "0%", "XH", /* Hex format string, prefix, suffix */
|
||||
"%oB", "%", "oB", /* Octal format string, prefix, suffix */
|
||||
&builtin_type_m2_card, /* longest unsigned integral type */
|
||||
&builtin_type_m2_real, /* longest floating point type */
|
||||
{"", "", "", ""}, /* Binary format info */
|
||||
{"%oB", "", "o", "B"}, /* Octal format info */
|
||||
{"%d", "", "d", ""}, /* Decimal format info */
|
||||
{"0%XH", "0", "X", "H"}, /* Hex format info */
|
||||
m2_op_print_tab, /* expression operators for printing */
|
||||
LANG_MAGIC
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user