mirror of
https://github.com/ruby/ruby.git
synced 2026-10-28 08:25:20 +08:00
Use digit scanner in the universal parser
Parser configuration no longer needs base-specific scanner callbacks.
This commit is contained in:
4 files changed
+7
-11
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user