aboutsummaryrefslogtreecommitdiffstats
path: root/parse.y
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-10-13 02:28:35 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-10-13 02:28:35 +0900
commit17b0643392749f45b7aacb64fc1c1bd704d42b4c (patch)
treef949fbb626dd71e9e00884aa929051a459372030 /parse.y
parent2dca02e273489c802a9860284a17333ddf67f161 (diff)
downloadruby-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.y10
1 files changed, 5 insertions, 5 deletions
diff --git a/parse.y b/parse.y
index 527aab09e3..d5c6ca36be 100644
--- a/parse.y
+++ b/parse.y
@@ -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;
}