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:
parent
ee09ab7f89
commit
36abac7fd3
@ -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>:
|
||||
|
12
gas/gasp.c
12
gas/gasp.c
@ -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];
|
||||
|
||||
|
||||
|
84
gas/macro.c
84
gas/macro.c
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user