enhance the format style c_fix & remove unneeded wrapper funcs

From-SVN: r33872
This commit is contained in:
Zack Weinberg 2000-05-12 15:51:55 +00:00 committed by Bruce Korb
parent d30a91f5bf
commit 4c6d912f7f
5 changed files with 101 additions and 89 deletions

View File

@ -1,3 +1,23 @@
2000-05-12 Zack Weinberg <zack@wolery.cumb.org>
* fixinc/fixfixes.c (IO_use_fix, IO_defn_fix, CTRL_use_fix,
CTRL_defn_fix): Delete.
(fix_char_macro_defines, fix_char_macro_uses): Rename to
char_macro_def_fix and char_macro_use_fix, respectively. Put
them into the FIXUP_TABLE. Get the string to search for from
a c_fix_arg.
(format_write): New function.
(format_fix): Use it.
(FIX_PROC_HEAD): Constify text parameter.
(machine_name_fix): Constify all char *s.
* fixtests.c (skip_quote): Remove double static.
* inclhack.def (io_def_quotes, io_use_quotes, ctrl_def_quotes,
ctrl_use_quotes): Update for new scheme.
* fixincl.x: Regenerate.
2000-05-12 Alexandre Oliva <aoliva@cygnus.com>
* config/mn10300/mn10300.h (PREFERRED_DEBUGGING_TYPE): Redefine as

View File

@ -123,6 +123,37 @@ print_quote( q, text )
return text;
}
static void
format_write (format, text, av)
tCC* format;
tCC* text;
regmatch_t av[];
{
tCC *p, *str;
int c;
size_t len;
for (p = 0; *p; p++) {
c = *p;
if (c != '%') {
putchar(c);
continue;
}
c = *++p;
if (c == '%') {
putchar(c);
continue;
} else if (c < '0' || c > '9') {
abort();
}
c -= '0';
str = text + av[c].rm_so;
len = av[c].rm_eo - av[c].rm_so;
fwrite(str, len, 1, stdout);
}
}
FIX_PROC_HEAD( format_fix )
{
@ -172,46 +203,8 @@ FIX_PROC_HEAD( format_fix )
char* apz[10];
int i;
/*
* Write the text up to the match
*/
fwrite( text, rm[0].rm_so, 1, stdout );
/*
* Copy all the submatches into separate strings
*/
for (i=0; i<10; i++) {
if (rm[i].rm_so == -1) {
apz[i] = (char*)NULL;
break;
}
{
int len = rm[i].rm_eo - rm[i].rm_so;
apz[i] = (char*)malloc( len + 1 );
memcpy( (void*)apz[i], text+rm[i].rm_so, len );
apz[i][len] = NUL;
}
}
/*
* IF there are any submatches,
* THEN only use the submatches in the formatting
*/
if (apz[1] != (char*)NULL)
printf( pz_fmt, apz[1], apz[2], apz[3], apz[4],
apz[5], apz[6], apz[7], apz[8], apz[9] );
else
printf( pz_fmt, apz[0] );
/*
* Free our submatch strings
*/
for (i=0; i<10; i++) {
if (apz[i] == (char*)NULL)
break;
free( (void*)apz[i] );
}
format_write( pz_fmt, text, rm );
text += rm[0].rm_eo;
}
@ -232,10 +225,8 @@ FIX_PROC_HEAD( format_fix )
which is the required syntax per the C standard. (The definition of
_IO also has to be tweaked - see below.) 'IO' is actually whatever you
provide in the STR argument. */
static void
fix_char_macro_uses (text, str)
const char *text;
const char *str;
FIX_PROC_HEAD( char_macro_use_fix )
{
/* This regexp looks for a traditional-syntax #define (# in column 1)
of an object-like macro. */
@ -245,8 +236,17 @@ fix_char_macro_uses (text, str)
regmatch_t rm[1];
const char *p, *limit;
size_t len = strlen (str);
const char *str = p_fixd->patch_args[0];
size_t len;
if (str == NULL)
{
fprintf (stderr, "%s needs macro-name-string argument",
p_fixd->fix_name);
exit(3);
}
len = strlen (str);
compile_re (pat, &re, 1, "macro pattern", "fix_char_macro_uses");
for (p = text;
@ -310,10 +310,7 @@ fix_char_macro_uses (text, str)
which is the required syntax per the C standard. (The uses of _IO
also have to be tweaked - see above.) 'IO' is actually whatever
you provide in the STR argument. */
static void
fix_char_macro_defines (text, str)
const char *text;
const char *str;
FIX_PROC_HEAD( char_macro_def_fix )
{
/* This regexp looks for any traditional-syntax #define (# in column 1). */
static const char pat[] =
@ -322,9 +319,17 @@ fix_char_macro_defines (text, str)
regmatch_t rm[1];
const char *p, *limit;
size_t len = strlen (str);
const char *str = p_fixd->patch_args[0];
size_t len;
char arg;
if (str == NULL)
{
fprintf (stderr, "%s needs macro-name-string argument",
p_fixd->fix_name);
exit(3);
}
compile_re (pat, &re, 1, "macro pattern", "fix_char_macro_defines");
for (p = text;
@ -391,27 +396,6 @@ fix_char_macro_defines (text, str)
fputs (text, stdout);
}
/* The various prefixes on these macros are handled automatically
because the fixers don't care where they start matching. */
FIX_PROC_HEAD( IO_use_fix )
{
fix_char_macro_uses (text, "IO");
}
FIX_PROC_HEAD( CTRL_use_fix )
{
fix_char_macro_uses (text, "CTRL");
}
FIX_PROC_HEAD( IO_defn_fix )
{
fix_char_macro_defines (text, "IO");
}
FIX_PROC_HEAD( CTRL_defn_fix )
{
fix_char_macro_defines (text, "CTRL");
}
/* Fix for machine name #ifdefs that are not in the namespace reserved
by the C standard. They won't be defined if compiling with -ansi,
and the headers will break. We go to some trouble to only change
@ -426,7 +410,7 @@ FIX_PROC_HEAD( machine_name_fix )
fputs( "The target machine has no needed machine name fixes\n", stderr );
#else
regmatch_t match[2];
char *line, *base, *limit, *p, *q;
const char *line, *base, *limit, *p, *q;
regex_t *label_re, *name_re;
char scratch[SCRATCHSZ];
size_t len;

View File

@ -1686,7 +1686,8 @@ tTestDesc aIo_Use_QuotesTests[] = {
* Fix Command Arguments for Io_Use_Quotes
*/
const char* apzIo_Use_QuotesPatch[] = {
"IO_use",
"char_macro_use",
"IO",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
@ -1720,7 +1721,8 @@ tTestDesc aIo_Def_QuotesTests[] = {
* Fix Command Arguments for Io_Def_Quotes
*/
const char* apzIo_Def_QuotesPatch[] = {
"IO_defn",
"char_macro_def",
"IO",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
@ -1754,7 +1756,8 @@ tTestDesc aCtrl_Use_QuotesTests[] = {
* Fix Command Arguments for Ctrl_Use_Quotes
*/
const char* apzCtrl_Use_QuotesPatch[] = {
"CTRL_use",
"char_macro_use",
"CTRL",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
@ -1788,7 +1791,8 @@ tTestDesc aCtrl_Def_QuotesTests[] = {
* Fix Command Arguments for Ctrl_Def_Quotes
*/
const char* apzCtrl_Def_QuotesPatch[] = {
"CTRL_defn",
"char_macro_def",
"CTRL",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *

View File

@ -72,7 +72,7 @@ static apply_fix_p_t test ( fname, text ) \
* a backslash. Especially a backslash followed by octal digits.
* We are not doing a correctness syntax check here.
*/
static tSCC*
static tCC*
skip_quote( q, text )
char q;
char* text;

View File

@ -978,15 +978,17 @@ fix = {
* _IO might be: _IO DESIO BSD43__IO with W, R, WR, C, ... suffixes.
*/
fix = {
hackname = io_use_quotes;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*\\( *[^,']";
c_fix = IO_use;
hackname = io_use_quotes;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*\\( *[^,']";
c_fix = char_macro_use;
c_fix_arg = "IO";
};
fix = {
hackname = io_def_quotes;
select = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\(([a-zA-Z]).*'\\1'";
c_fix = IO_defn;
hackname = io_def_quotes;
select = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\(([a-zA-Z]).*'\\1'";
c_fix = char_macro_def;
c_fix_arg = "IO";
};
@ -995,15 +997,17 @@ fix = {
* CTRL might be: CTRL _CTRL ISCTRL BSD43_CTRL ...
*/
fix = {
hackname = ctrl_use_quotes;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
c_fix = CTRL_use;
hackname = ctrl_use_quotes;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
c_fix = char_macro_use;
c_fix_arg = "CTRL";
};
fix = {
hackname = ctrl_def_quotes;
select = "define[ \t]+[A-Z0-9_]+CTRL\\(([a-zA-Z]).*'\\1'";
c_fix = CTRL_defn;
hackname = ctrl_def_quotes;
select = "define[ \t]+[A-Z0-9_]+CTRL\\(([a-zA-Z]).*'\\1'";
c_fix = char_macro_def;
c_fix_arg = "CTRL";
};