Use digit scanner in the universal parser

Parser configuration no longer needs base-specific scanner callbacks.
This commit is contained in:
Nobuyoshi Nakada committed 2026-10-27 01:32:35 +09:00
1 parent f2f9b55680
commit 6b15825df0
4 files changed
+7 -11

No files matched your search

+7 -5
View File
@@ -7794,7 +7794,7 @@ tok_hex(struct parser_params *p, size_t *numlen)
{
int c;
c = (int)ruby_scan_hex(p->lex.pcur, 2, numlen);
c = (int)ruby_scan_digits(p->lex.pcur, 2, 16, numlen, &c);
if (!*numlen) {
flush_string_content(p, p->enc, rb_strlen_lit("\\x"));
yyerror0("invalid hex escape");
@@ -7842,8 +7842,8 @@ tokadd_codepoint(struct parser_params *p, rb_encoding **encp,
int regexp_literal, const char *begin)
{
const int wide = !begin;
size_t numlen;
int codepoint = (int)ruby_scan_hex(p->lex.pcur, wide ? p->lex.pend - p->lex.pcur : 4, &numlen);
size_t numlen = wide ? p->lex.pend - p->lex.pcur : 4;
int ov, codepoint = (int)ruby_scan_digits(p->lex.pcur, numlen, 16, &numlen, &ov);
p->lex.pcur += numlen;
if (p->lex.strterm == NULL ||
@@ -8032,7 +8032,8 @@ read_escape(struct parser_params *p, int flags, const char *begin)
case '0': case '1': case '2': case '3': /* octal constant */
case '4': case '5': case '6': case '7':
pushback(p, c);
c = (int)ruby_scan_oct(p->lex.pcur, 3, &numlen);
int ov;
c = (int)ruby_scan_digits(p->lex.pcur, 3, 8, &numlen, &ov);
p->lex.pcur += numlen;
return c;
@@ -8161,7 +8162,8 @@ tokadd_escape(struct parser_params *p)
case '0': case '1': case '2': case '3': /* octal constant */
case '4': case '5': case '6': case '7':
{
ruby_scan_oct(--p->lex.pcur, 3, &numlen);
int ov;
ruby_scan_digits(--p->lex.pcur, 3, 8, &numlen, &ov);
if (numlen == 0) goto eof;
p->lex.pcur += numlen;
tokcopy(p, (int)numlen + 1);
-2
View File
@@ -425,8 +425,6 @@ static const rb_parser_config_t rb_global_parser_config = {
.make_backtrace = rb_make_backtrace,
.scan_hex = ruby_scan_hex,
.scan_oct = ruby_scan_oct,
.scan_digits = ruby_scan_digits,
.strtod = ruby_strtod,
-2
View File
@@ -1347,8 +1347,6 @@ typedef struct rb_parser_config_struct {
VALUE (*make_backtrace)(void);
/* Util */
unsigned long (*scan_hex)(const char *start, size_t len, size_t *retlen);
unsigned long (*scan_oct)(const char *start, size_t len, size_t *retlen);
unsigned long (*scan_digits)(const char *str, ssize_t len, int base, size_t *retlen, int *overflow);
double (*strtod)(const char *s00, char **se);
-2
View File
@@ -187,8 +187,6 @@
#define rb_make_backtrace p->config->make_backtrace
#define ruby_scan_hex p->config->scan_hex
#define ruby_scan_oct p->config->scan_oct
#define ruby_scan_digits p->config->scan_digits
#define strtod p->config->strtod