diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-22 19:28:00 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-22 19:28:00 +0000 |
commit | bc205914531d551c6d7526da0ae70533b99c7a3c (patch) | |
tree | 0004496cf3900a93b9e0ad258622e9c33e36e97d /gcc/cpplex.c | |
parent | 008a77ec2740a275f6e06e8752b5ee785a675e28 (diff) | |
download | gcc-bc205914531d551c6d7526da0ae70533b99c7a3c.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65951 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpplex.c')
-rw-r--r-- | gcc/cpplex.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/gcc/cpplex.c b/gcc/cpplex.c index c148dad0792..552a40657e0 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; } |