mirror of
https://github.com/python/cpython.git
synced 2025-07-29 22:24:49 +00:00
Finished backporting PEP 3127, Integer Literal Support and Syntax.
Added 0b and 0o literals to tokenizer. Modified PyOS_strtoul to support 0b and 0o inputs. Modified PyLong_FromString to support guessing 0b and 0o inputs. Renamed test_hexoct.py to test_int_literal.py and added binary tests. Added upper and lower case 0b, 0O, and 0X tests to test_int_literal.py
This commit is contained in:
parent
7cfbf0c421
commit
9ff19b5434
7 changed files with 336 additions and 125 deletions
|
@ -1465,14 +1465,27 @@ PyLong_FromString(char *str, char **pend, int base)
|
|||
while (*str != '\0' && isspace(Py_CHARMASK(*str)))
|
||||
str++;
|
||||
if (base == 0) {
|
||||
/* No base given. Deduce the base from the contents
|
||||
of the string */
|
||||
if (str[0] != '0')
|
||||
base = 10;
|
||||
else if (str[1] == 'x' || str[1] == 'X')
|
||||
base = 16;
|
||||
else if (str[1] == 'o' || str[1] == 'O')
|
||||
base = 8;
|
||||
else if (str[1] == 'b' || str[1] == 'B')
|
||||
base = 2;
|
||||
else
|
||||
/* "old" (C-style) octal literal, still valid in
|
||||
2.x, although illegal in 3.x */
|
||||
base = 8;
|
||||
}
|
||||
if (base == 16 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
|
||||
/* Whether or not we were deducing the base, skip leading chars
|
||||
as needed */
|
||||
if (str[0] == '0' &&
|
||||
((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
|
||||
(base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
|
||||
(base == 2 && (str[1] == 'b' || str[1] == 'B'))))
|
||||
str += 2;
|
||||
|
||||
start = str;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue