Commit b57062ca by Ulrich Drepper

(format_char_info): Add new field hhlen.

(print_char_table, scan_char_table, time_char_table): Initialize
hhlen field appropriately.
(char_format_info): Recognize hh modifier and lookup correct char
table entry.

From-SVN: r19532
parent 06eaa86f
1998-05-04 Ulrich Drepper <drepper@cygnus.com>
* c-common.c (format_char_info): Add new field hhlen.
(print_char_table, scan_char_table, time_char_table): Initialize
hhlen field appropriately.
(char_format_info): Recognize hh modifier and lookup correct char
table entry.
Mon May 4 19:15:29 1998 Jim Wilson <wilson@cygnus.com> Mon May 4 19:15:29 1998 Jim Wilson <wilson@cygnus.com>
* expr.c (expand_expr, case INDIRECT_REF): Don't optimize string * expr.c (expand_expr, case INDIRECT_REF): Don't optimize string
...@@ -8590,4 +8598,3 @@ Mon Aug 11 10:04:49 1997 Jeffrey A Law (law@cygnus.com) ...@@ -8590,4 +8598,3 @@ Mon Aug 11 10:04:49 1997 Jeffrey A Law (law@cygnus.com)
Sun Aug 10 12:00:20 1997 Jeffrey A Law (law@cygnus.com) Sun Aug 10 12:00:20 1997 Jeffrey A Law (law@cygnus.com)
* egcs project officially starts. * egcs project officially starts.
...@@ -960,6 +960,7 @@ strip_attrs (specs_attrs) ...@@ -960,6 +960,7 @@ strip_attrs (specs_attrs)
#define T_D &double_type_node #define T_D &double_type_node
#define T_LD &long_double_type_node #define T_LD &long_double_type_node
#define T_C &char_type_node #define T_C &char_type_node
#define T_UC &unsigned_char_type_node
#define T_V &void_type_node #define T_V &void_type_node
#define T_W &wchar_type_node #define T_W &wchar_type_node
#define T_ST &sizetype #define T_ST &sizetype
...@@ -971,6 +972,9 @@ typedef struct { ...@@ -971,6 +972,9 @@ typedef struct {
tree *nolen; tree *nolen;
/* Type of argument if length modifier for shortening is used. /* Type of argument if length modifier for shortening is used.
If NULL, then this modifier is not allowed. */ If NULL, then this modifier is not allowed. */
tree *hhlen;
/* Type of argument if length modifier for shortening to byte if used.
If NULL, then this modifier is not allowed. */
tree *hlen; tree *hlen;
/* Type of argument if length modifier `l' is used. /* Type of argument if length modifier `l' is used.
If NULL, then this modifier is not allowed. */ If NULL, then this modifier is not allowed. */
...@@ -989,31 +993,31 @@ typedef struct { ...@@ -989,31 +993,31 @@ typedef struct {
} format_char_info; } format_char_info;
static format_char_info print_char_table[] = { static format_char_info print_char_table[] = {
{ "di", 0, T_I, T_I, T_L, T_LL, T_LL, T_ST, "-wp0 +" }, { "di", 0, T_I, T_I, T_I, T_L, T_LL, T_LL, T_ST, "-wp0 +" },
{ "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0#" }, { "oxX", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0#" },
{ "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0" }, { "u", 0, T_UI, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0" },
/* A GNU extension. */ /* A GNU extension. */
{ "m", 0, T_V, NULL, NULL, NULL, NULL, NULL, "-wp" }, { "m", 0, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "-wp" },
{ "feEgGaA", 0, T_D, NULL, NULL, NULL, T_LD, NULL, "-wp0 +#" }, { "feEgGaA", 0, T_D, NULL, NULL, NULL, NULL, T_LD, NULL, "-wp0 +#" },
{ "c", 0, T_I, NULL, T_W, NULL, NULL, NULL, "-w" }, { "c", 0, T_I, NULL, NULL, T_W, NULL, NULL, NULL, "-w" },
{ "C", 0, T_W, NULL, NULL, NULL, NULL, NULL, "-w" }, { "C", 0, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "-w" },
{ "s", 1, T_C, NULL, T_W, NULL, NULL, NULL, "-wp" }, { "s", 1, T_C, NULL, NULL, T_W, NULL, NULL, NULL, "-wp" },
{ "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "-wp" }, { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "-wp" },
{ "p", 1, T_V, NULL, NULL, NULL, NULL, NULL, "-w" }, { "p", 1, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "-w" },
{ "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" }, { "n", 1, T_I, NULL, T_S, T_L, T_LL, NULL, NULL, "" },
{ NULL } { NULL }
}; };
static format_char_info scan_char_table[] = { static format_char_info scan_char_table[] = {
{ "di", 1, T_I, T_S, T_L, T_LL, T_LL, NULL, "*" }, { "di", 1, T_I, T_C, T_S, T_L, T_LL, T_LL, NULL, "*" },
{ "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, NULL, "*" }, { "ouxX", 1, T_UI, T_UC, T_US, T_UL, T_ULL, T_ULL, NULL, "*" },
{ "efgEGaA", 1, T_F, NULL, T_D, NULL, T_LD, NULL, "*" }, { "efgEGaA", 1, T_F, NULL, NULL, T_D, NULL, T_LD, NULL, "*" },
{ "sc", 1, T_C, NULL, T_W, NULL, NULL, NULL, "*a" }, { "sc", 1, T_C, NULL, NULL, T_W, NULL, NULL, NULL, "*a" },
{ "[", 1, T_C, NULL, NULL, NULL, NULL, NULL, "*a" }, { "[", 1, T_C, NULL, NULL, NULL, NULL, NULL, NULL, "*a" },
{ "C", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" }, { "C", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "*" },
{ "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" }, { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, NULL, "*" },
{ "p", 2, T_V, NULL, NULL, NULL, NULL, NULL, "*" }, { "p", 2, T_V, NULL, NULL, NULL, NULL, NULL, NULL, "*" },
{ "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" }, { "n", 1, T_I, T_C, T_S, T_L, T_LL, NULL, NULL, "" },
{ NULL } { NULL }
}; };
...@@ -1026,19 +1030,19 @@ static format_char_info scan_char_table[] = { ...@@ -1026,19 +1030,19 @@ static format_char_info scan_char_table[] = {
'G' - other GNU extensions */ 'G' - other GNU extensions */
static format_char_info time_char_table[] = { static format_char_info time_char_table[] = {
{ "y", 0, NULL, NULL, NULL, NULL, NULL, NULL, "2EO-_0w" }, { "y", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2EO-_0w" },
{ "D", 0, NULL, NULL, NULL, NULL, NULL, NULL, "2" }, { "D", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2" },
{ "g", 0, NULL, NULL, NULL, NULL, NULL, NULL, "2O-_0w" }, { "g", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2O-_0w" },
{ "cx", 0, NULL, NULL, NULL, NULL, NULL, NULL, "3E" }, { "cx", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "3E" },
{ "%RTXnrt", 0, NULL, NULL, NULL, NULL, NULL, NULL, "" }, { "%RTXnrt", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "" },
{ "P", 0, NULL, NULL, NULL, NULL, NULL, NULL, "G" }, { "P", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "G" },
{ "HIMSUWdemw", 0, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Ow" }, { "HIMSUWdemw", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Ow" },
{ "Vju", 0, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Oow" }, { "Vju", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Oow" },
{ "Gklsz", 0, NULL, NULL, NULL, NULL, NULL, NULL, "-_0OGw" }, { "Gklsz", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0OGw" },
{ "ABZa", 0, NULL, NULL, NULL, NULL, NULL, NULL, "^#" }, { "ABZa", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "^#" },
{ "p", 0, NULL, NULL, NULL, NULL, NULL, NULL, "#" }, { "p", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "#" },
{ "bh", 0, NULL, NULL, NULL, NULL, NULL, NULL, "^" }, { "bh", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "^" },
{ "CY", 0, NULL, NULL, NULL, NULL, NULL, NULL, "-_0EOw" }, { "CY", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0EOw" },
{ NULL } { NULL }
}; };
...@@ -1536,9 +1540,17 @@ check_format_info (info, params) ...@@ -1536,9 +1540,17 @@ check_format_info (info, params)
} }
else else
length_char = 0; length_char = 0;
if (length_char == 'h' && *format_chars == 'h')
{
length_char = 'H', format_chars++;
/* FIXME: Is allowed in ISO C 9x. */
if (pedantic)
warning ("ANSI C does not support the `hh' length modifier");
}
if (length_char == 'l' && *format_chars == 'l') if (length_char == 'l' && *format_chars == 'l')
{ {
length_char = 'q', format_chars++; length_char = 'q', format_chars++;
/* FIXME: Is allowed in ISO C 9x. */
if (pedantic) if (pedantic)
warning ("ANSI C does not support the `ll' length modifier"); warning ("ANSI C does not support the `ll' length modifier");
} }
...@@ -1651,6 +1663,7 @@ check_format_info (info, params) ...@@ -1651,6 +1663,7 @@ check_format_info (info, params)
switch (length_char) switch (length_char)
{ {
default: wanted_type = fci->nolen ? *(fci->nolen) : 0; break; default: wanted_type = fci->nolen ? *(fci->nolen) : 0; break;
case 'H': wanted_type = fci->hhlen ? *(fci->hhlen) : 0; break;
case 'h': wanted_type = fci->hlen ? *(fci->hlen) : 0; break; case 'h': wanted_type = fci->hlen ? *(fci->hlen) : 0; break;
case 'l': wanted_type = fci->llen ? *(fci->llen) : 0; break; case 'l': wanted_type = fci->llen ? *(fci->llen) : 0; break;
case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break; case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment