Browse Source

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.
gdb-4_18-branch
Ian Lance Taylor 29 years ago
parent
commit
36abac7fd3
  1. 7
      gas/ChangeLog
  2. 12
      gas/gasp.c
  3. 52
      gas/macro.c

7
gas/ChangeLog

@ -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

@ -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];

52
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,12 +298,10 @@ 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++;
@ -323,22 +324,6 @@ getstring (idx, in, acc)
}
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++;
}
}
else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'')
{
char tchar = 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…
Cancel
Save