diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-07-20 19:54:59 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-07-21 19:32:18 +0900 |
commit | 04b5e85bfda5ba281f2129d148c952eabc5e49a3 (patch) | |
tree | 9289617b80cae05cd97b7a7df2b30825e033ad2e /util.c | |
parent | b2749e0026768f6a7968fc627ba50446632b8288 (diff) |
Look up ruby_digit36_to_number_table
Instead of scanning ruby_hexdigits.
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 11 |
1 files changed, 4 insertions, 7 deletions
@@ -57,19 +57,16 @@ ruby_scan_hex(const char *start, size_t len, size_t *retlen) { register const char *s = start; register unsigned long retval = 0; - const char *tmp; + signed char d; size_t i = 0; for (i = 0; i < len; i++) { - if (! s[0]) { - break; - } - tmp = strchr(hexdigit, *s); - if (! tmp) { + d = ruby_digit36_to_number_table[(unsigned char)*s]; + if (d < 0 || 15 < d) { break; } retval <<= 4; - retval |= (tmp - hexdigit) & 15; + retval |= d; s++; } *retlen = (int)(s - start); /* less than len */ |