From c2dd494bd989ed1a32bf09816f211c04ad243a8b Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 28 Dec 2016 12:02:49 +1100 Subject: [PATCH] py/parsenum: Simplify and generalise decoding of digit values. This function should be able to parse integers with any value for the base, because it is called by int('xxx', base). --- py/parsenum.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/py/parsenum.c b/py/parsenum.c index b1c449c9b..0be7453dd 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -81,20 +81,18 @@ mp_obj_t mp_parse_num_integer(const char *restrict str_, size_t len, int base, m for (; str < top; str++) { // get next digit as a value mp_uint_t dig = *str; - if (unichar_isdigit(dig) && (int)dig - '0' < base) { - // 0-9 digit - dig = dig - '0'; - } else if (base == 16) { - dig |= 0x20; - if ('a' <= dig && dig <= 'f') { - // a-f hex digit - dig = dig - 'a' + 10; + if ('0' <= dig && dig <= '9') { + dig -= '0'; + } else { + dig |= 0x20; // make digit lower-case + if ('a' <= dig && dig <= 'z') { + dig -= 'a' - 10; } else { // unknown character break; } - } else { - // unknown character + } + if (dig >= base) { break; }