diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-10-13 02:28:35 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-10-13 02:28:35 +0900 |
commit | 17b0643392749f45b7aacb64fc1c1bd704d42b4c (patch) | |
tree | f949fbb626dd71e9e00884aa929051a459372030 /parse.y | |
parent | 2dca02e273489c802a9860284a17333ddf67f161 (diff) | |
download | ruby-17b0643392749f45b7aacb64fc1c1bd704d42b4c.tar.gz |
[Bug #19924] Source code should be unsigned char stream
Use `peekc` or `nextc` to fetch the next character, instead of reading
from `lex.pcur` directly, for compilers that plain char is signed.
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -7911,9 +7911,9 @@ tokadd_utf8(struct parser_params *p, rb_encoding **encp, * invalid unicode escapes are allowed in comments. The regexp parser * does its own validation and will catch any issues. */ - int c = *p->lex.pcur; - tokadd(p, c); - for (c = *++p->lex.pcur; p->lex.pcur < p->lex.pend; c = *++p->lex.pcur) { + tokadd(p, open_brace); + while (++p->lex.pcur < p->lex.pend) { + int c = peekc(p); if (c == close_brace) { tokadd(p, c); ++p->lex.pcur; @@ -8310,7 +8310,7 @@ tokadd_string(struct parser_params *p, --*nest; } else if ((func & STR_FUNC_EXPAND) && c == '#' && !lex_eol_p(p)) { - int c2 = *p->lex.pcur; + unsigned char c2 = *p->lex.pcur; if (c2 == '$' || c2 == '@' || c2 == '{') { pushback(p, c); break; @@ -9916,7 +9916,7 @@ parse_qmark(struct parser_params *p, int space_seen) enc = rb_utf8_encoding(); tokadd_utf8(p, &enc, -1, 0, 0); } - else if (!lex_eol_p(p) && !(c = *p->lex.pcur, ISASCII(c))) { + else if (!ISASCII(c = peekc(p))) { nextc(p); if (tokadd_mbchar(p, c) == -1) return 0; } |