aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplex.c
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.co.uk>2003-04-22 19:28:00 +0000
committerNeil Booth <neil@gcc.gnu.org>2003-04-22 19:28:00 +0000
commit1067694a52b1cb7b5508c1240cc1d58bc71113d4 (patch)
tree0004496cf3900a93b9e0ad258622e9c33e36e97d /gcc/cpplex.c
parent45aca21f40ea1aad7cf94857e064fa0cd9ea1a93 (diff)
downloadgcc-1067694a52b1cb7b5508c1240cc1d58bc71113d4.zip
gcc-1067694a52b1cb7b5508c1240cc1d58bc71113d4.tar.gz
gcc-1067694a52b1cb7b5508c1240cc1d58bc71113d4.tar.bz2
c-lex.c (c_lex): Handle CPP_OTHER differently.
* c-lex.c (c_lex): Handle CPP_OTHER differently. * cppexp.c (_cpp_parse_expr): Similarly. * cpplex.c (SPELL_CHAR): Remove. (_cpp_lex_direct): Stray chars are saved as byte strings. (cpp_spell_token, cpp_output_token, _cpp_equiv_token): Don't handle SPELL_CHAR. (cpp_avoid_paste): Update handling of CPP_OTHER. * cpplib.h: Spell CPP_OTHER like a number. (struct cpp_token): Remove member c. * cppmacro.c (stringify_arg): Update handling of CPP_OTHER. From-SVN: r65951
Diffstat (limited to 'gcc/cpplex.c')
-rw-r--r--gcc/cpplex.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index c148dad..552a406 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -31,7 +31,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
enum spell_type
{
SPELL_OPERATOR = 0,
- SPELL_CHAR,
SPELL_IDENT,
SPELL_NUMBER,
SPELL_STRING,
@@ -1076,10 +1075,16 @@ _cpp_lex_direct (pfile)
break;
}
buffer->cur++;
+ }
- default:
+ default:
+ {
+ uchar *dest = _cpp_unaligned_alloc (pfile, 1 + 1);
+ dest[0] = c;
+ dest[1] = '\0';
result->type = CPP_OTHER;
- result->val.c = c;
+ result->val.str.len = 1;
+ result->val.str.text = dest;
break;
}
}
@@ -1136,10 +1141,6 @@ cpp_spell_token (pfile, token, buffer)
}
break;
- case SPELL_CHAR:
- *buffer++ = token->val.c;
- break;
-
spell_ident:
case SPELL_IDENT:
memcpy (buffer, NODE_NAME (token->val.node), NODE_LEN (token->val.node));
@@ -1237,10 +1238,6 @@ cpp_output_token (token, fp)
}
break;
- case SPELL_CHAR:
- putc (token->val.c, fp);
- break;
-
spell_ident:
case SPELL_IDENT:
fwrite (NODE_NAME (token->val.node), 1, NODE_LEN (token->val.node), fp);
@@ -1288,8 +1285,6 @@ _cpp_equiv_tokens (a, b)
default: /* Keep compiler happy. */
case SPELL_OPERATOR:
return 1;
- case SPELL_CHAR:
- return a->val.c == b->val.c; /* Character. */
case SPELL_NONE:
return (a->type != CPP_MACRO_ARG || a->val.arg_no == b->val.arg_no);
case SPELL_IDENT:
@@ -1352,9 +1347,10 @@ cpp_avoid_paste (pfile, token1, token2)
case CPP_NUMBER: return (b == CPP_NUMBER || b == CPP_NAME
|| c == '.' || c == '+' || c == '-');
/* UCNs */
- case CPP_OTHER: return ((token1->val.c == '\\' && b == CPP_NAME)
+ case CPP_OTHER: return ((token1->val.str.text[0] == '\\'
+ && b == CPP_NAME)
|| (CPP_OPTION (pfile, objc)
- && token1->val.c == '@'
+ && token1->val.str.text[0] == '@'
&& (b == CPP_NAME || b == CPP_STRING)));
default: break;
}