Wed Mar 25 13:10:42 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>

* gasp.c (IS*): Cast argument to unsigned char, not unsigned int.
        * macro.c (macro_expand_body): Increase buffer size.
        * messages.c (as_warn): Likewise.
	(as_warn_where, as_bad, as_bad_where): Likewise.
This commit is contained in:
Ian Lance Taylor 1998-03-25 18:12:52 +00:00
parent ee09ab7f89
commit 36abac7fd3
3 changed files with 50 additions and 53 deletions

View File

@ -1,3 +1,10 @@
Wed Mar 25 13:10:42 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
* gasp.c (IS*): Cast argument to unsigned char, not unsigned int.
* macro.c (macro_expand_body): Increase buffer size.
* messages.c (as_warn): Likewise.
(as_warn_where, as_bad, as_bad_where): Likewise.
Wed Mar 25 12:59:07 1998 Ian Lance Taylor <ian@cygnus.com>
Based on patch from H.J. Lu <hjl@gnu.org>:

View File

@ -105,12 +105,12 @@ FILE *outfile;
#define WHITEBIT 8
#define COMMENTBIT 16
#define BASEBIT 32
#define ISCOMMENTCHAR(x) (chartype[(unsigned)(x)] & COMMENTBIT)
#define ISFIRSTCHAR(x) (chartype[(unsigned)(x)] & FIRSTBIT)
#define ISNEXTCHAR(x) (chartype[(unsigned)(x)] & NEXTBIT)
#define ISSEP(x) (chartype[(unsigned)(x)] & SEPBIT)
#define ISWHITE(x) (chartype[(unsigned)(x)] & WHITEBIT)
#define ISBASE(x) (chartype[(unsigned)(x)] & BASEBIT)
#define ISCOMMENTCHAR(x) (chartype[(unsigned char)(x)] & COMMENTBIT)
#define ISFIRSTCHAR(x) (chartype[(unsigned char)(x)] & FIRSTBIT)
#define ISNEXTCHAR(x) (chartype[(unsigned char)(x)] & NEXTBIT)
#define ISSEP(x) (chartype[(unsigned char)(x)] & SEPBIT)
#define ISWHITE(x) (chartype[(unsigned char)(x)] & WHITEBIT)
#define ISBASE(x) (chartype[(unsigned char)(x)] & BASEBIT)
static char chartype[256];

View File

@ -1,5 +1,5 @@
/* macro.c - macro support for gas and gasp
Copyright (C) 1994, 95, 96, 1997 Free Software Foundation, Inc.
Copyright (C) 1994, 95, 96, 97, 1998 Free Software Foundation, Inc.
Written by Steve and Judy Chamberlain of Cygnus Support,
sac@cygnus.com
@ -25,11 +25,13 @@
/* AIX requires this to be the first thing in the file. */
#ifdef __GNUC__
#ifdef __STDC__
# ifndef alloca
# ifdef __STDC__
extern void *alloca ();
#else
# else
extern char *alloca ();
#endif
# endif
# endif
#else
# if HAVE_ALLOCA_H
# include <alloca.h>
@ -119,7 +121,8 @@ static const char *macro_expand PARAMS ((int, sb *, macro_entry *, sb *, int));
#define ISSEP(x) \
((x) == ' ' || (x) == '\t' || (x) == ',' || (x) == '"' || (x) == ';' \
|| (x) == '<' || (x) == '>' || (x) == ')' || (x) == '(')
|| (x) == ')' || (x) == '(' \
|| ((macro_alternate || macro_mri) && ((x) == '<' || (x) == '>')))
#define ISBASE(x) \
((x) == 'b' || (x) == 'B' \
@ -295,49 +298,31 @@ getstring (idx, in, acc)
while (idx < in->len
&& (in->ptr[idx] == '"'
|| in->ptr[idx] == '<'
|| (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
|| (in->ptr[idx] == '\'' && macro_alternate)))
{
if (in->ptr[idx] == '<')
{
if (macro_alternate || macro_mri)
int nest = 0;
idx++;
while ((in->ptr[idx] != '>' || nest)
&& idx < in->len)
{
int nest = 0;
idx++;
while ((in->ptr[idx] != '>' || nest)
&& idx < in->len)
if (in->ptr[idx] == '!')
{
if (in->ptr[idx] == '!')
{
idx++ ;
sb_add_char (acc, in->ptr[idx++]);
}
else
{
if (in->ptr[idx] == '>')
nest--;
if (in->ptr[idx] == '<')
nest++;
sb_add_char (acc, in->ptr[idx++]);
}
idx++ ;
sb_add_char (acc, in->ptr[idx++]);
}
else
{
if (in->ptr[idx] == '>')
nest--;
if (in->ptr[idx] == '<')
nest++;
sb_add_char (acc, in->ptr[idx++]);
}
idx++;
}
else
{
int code;
idx++;
idx = ((*macro_expr)
("character code in string must be absolute expression",
idx, in, &code));
sb_add_char (acc, code);
#if 0
if (in->ptr[idx] != '>')
ERROR ((stderr, "Missing > for character code.\n"));
#endif
idx++;
}
idx++;
}
else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'')
{
@ -409,7 +394,7 @@ get_any_string (idx, in, out, expand, pretend_quoted)
sb_add_string (out, buf);
}
else if (in->ptr[idx] == '"'
|| in->ptr[idx] == '<'
|| (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
|| (macro_alternate && in->ptr[idx] == '\''))
{
if (macro_alternate
@ -436,7 +421,8 @@ get_any_string (idx, in, out, expand, pretend_quoted)
|| (in->ptr[idx] != ' '
&& in->ptr[idx] != '\t'
&& in->ptr[idx] != ','
&& in->ptr[idx] != '<')))
&& (in->ptr[idx] != '<'
|| (! macro_alternate && ! macro_mri)))))
{
if (in->ptr[idx] == '"'
|| in->ptr[idx] == '\'')
@ -655,6 +641,11 @@ sub_actual (start, in, t, formal_hash, kind, out, copyifnotthere)
sb_add_sb (out, &ptr->def);
}
}
else if (kind == '&')
{
/* Doing this permits people to use & in macro bodies. */
sb_add_char (out, '&');
}
else if (copyifnotthere)
{
sb_add_sb (out, t);
@ -699,8 +690,7 @@ macro_expand_body (in, out, formals, formal_hash, comment_char, locals)
}
else
{
/* FIXME: Why do we do this? It prevents people from
using the & operator in a macro. */
/* FIXME: Why do we do this? */
src = sub_actual (src + 1, in, &t, formal_hash, '&', out, 0);
}
}
@ -731,7 +721,7 @@ macro_expand_body (in, out, formals, formal_hash, comment_char, locals)
{
/* Sub in the macro invocation number */
char buffer[6];
char buffer[10];
src++;
sprintf (buffer, "%05d", macro_number);
sb_add_string (out, buffer);
@ -977,8 +967,8 @@ macro_expand (idx, in, m, out, comment_char)
if (scan < in->len && !macro_alternate && in->ptr[scan] == '=')
{
is_keyword = 1;
if (is_positional)
return "can't mix positional and keyword arguments";
/* It's OK to go from positional to keyword. */
/* This is a keyword arg, fetch the formal name and
then the actual stuff */