diff options
author | Damien George <damien.p.george@gmail.com> | 2016-12-28 12:02:49 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-12-28 12:02:49 +1100 |
commit | c2dd494bd989ed1a32bf09816f211c04ad243a8b (patch) | |
tree | f357ca026129f4ca334e5e25bea771a1a6c9551b /py | |
parent | 25f44c19f17085a09ad0f857c6ccc0d33d7c0344 (diff) | |
download | micropython-c2dd494bd989ed1a32bf09816f211c04ad243a8b.tar.gz micropython-c2dd494bd989ed1a32bf09816f211c04ad243a8b.zip |
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).
Diffstat (limited to 'py')
-rw-r--r-- | py/parsenum.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/py/parsenum.c b/py/parsenum.c index b1c449c9b8..0be7453ddc 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; } |