From 57eb0c15a10dfcd9816b84166106a1aa32323325 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Wed, 20 May 2020 12:15:24 -0700 Subject: fix: made rune constants unsigned for implicit casting --- sys/cmd/cc/lex.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'sys/cmd/cc/lex.c') diff --git a/sys/cmd/cc/lex.c b/sys/cmd/cc/lex.c index 6c57b3c..8ce4e79 100644 --- a/sys/cmd/cc/lex.c +++ b/sys/cmd/cc/lex.c @@ -25,13 +25,13 @@ puttok(Token tok) // ----------------------------------------------------------------------- // simple wrappers -byte +int getbyte(Lexer *lx) { return bufio·getbyte(&lx->io->buf); } -byte +int getnsbyte(Lexer *lx) { int b; @@ -246,7 +246,6 @@ lex(Lexer *lx) { int b, n, f; vlong v, _; - uint u; rune r; string s; double d; @@ -260,7 +259,7 @@ GetByte: Dispatch: tok.pos.beg = lx->pos; - if (b >= RuneSelf || b == '_') + if ((b != EOF && b >= RuneSelf) || b == '_') goto Talpha; if (isalpha(b)) { if (b != 'L') @@ -604,7 +603,6 @@ Dispatch: goto Return; Talpha: - u = b; s = lx->buf; e = lx->buf + arrlen(lx->buf); for (;;) { @@ -612,18 +610,18 @@ Dispatch: errorat(lx->pos, "identifier too long for buffer: %s", s); goto Nospace; } - if (u != EOF && u >= RuneSelf) { + if (b != EOF && b >= RuneSelf) { ungetbyte(lx); r = getrune(lx); if (!utf8·isletter(r) && !utf8·isdigit(r) && r != 0xb7) { errorat(lx->pos, "invalid identifier character %d", r); } s += utf8·runetochar(s, &r); - } else if (!isalnum(u) && u != '_') + } else if (!isalnum(b) && b != '_') break; else - *s++ = u; - u = getbyte(lx); + *s++ = b; + b = getbyte(lx); } *s = '\0'; ungetbyte(lx); @@ -639,6 +637,7 @@ Dispatch: sym = lookup(&lx->sym, tok.val.s); if (sym) { io = makeio(); + printf("EXPANDING MACRO %s\n", sym->name); io->buf.end += expandmacro(lx, sym, io->b); *io->buf.end++ = EOF; pushio(lx, io); -- cgit v1.2.1