diff options
author | Eric Smith <eric@trueblade.com> | 2008-03-17 17:32:20 (GMT) |
---|---|---|
committer | Eric Smith <eric@trueblade.com> | 2008-03-17 17:32:20 (GMT) |
commit | 9ff19b54346d39d15cdcf75e9d66ab46ea6064d6 (patch) | |
tree | e4a83605262567c9c9abff7a7afa3edc1bd61681 /Parser/tokenizer.c | |
parent | 7cfbf0c421137dfac5d9d2e4c879302ba5f80d88 (diff) | |
download | cpython-9ff19b54346d39d15cdcf75e9d66ab46ea6064d6.zip cpython-9ff19b54346d39d15cdcf75e9d66ab46ea6064d6.tar.gz cpython-9ff19b54346d39d15cdcf75e9d66ab46ea6064d6.tar.bz2 |
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
Diffstat (limited to 'Parser/tokenizer.c')
-rw-r--r-- | Parser/tokenizer.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 1314f5f..6df3005 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1335,7 +1335,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) /* Number */ if (isdigit(c)) { if (c == '0') { - /* Hex or octal -- maybe. */ + /* Hex, octal or binary -- maybe. */ c = tok_nextc(tok); if (c == '.') goto fraction; @@ -1356,6 +1356,30 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) c = tok_nextc(tok); } while (isxdigit(c)); } + else if (c == 'o' || c == 'O') { + /* Octal */ + c = tok_nextc(tok); + if (c < '0' || c > '8') { + tok->done = E_TOKEN; + tok_backup(tok, c); + return ERRORTOKEN; + } + do { + c = tok_nextc(tok); + } while ('0' <= c && c < '8'); + } + else if (c == 'b' || c == 'B') { + /* Binary */ + c = tok_nextc(tok); + if (c != '0' && c != '1') { + tok->done = E_TOKEN; + tok_backup(tok, c); + return ERRORTOKEN; + } + do { + c = tok_nextc(tok); + } while (c == '0' || c == '1'); + } else { int found_decimal = 0; /* Octal; c is first char of it */ |