summaryrefslogtreecommitdiffstats
path: root/Parser/tokenizer.c
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2008-03-17 17:32:20 (GMT)
committerEric Smith <eric@trueblade.com>2008-03-17 17:32:20 (GMT)
commit9ff19b54346d39d15cdcf75e9d66ab46ea6064d6 (patch)
treee4a83605262567c9c9abff7a7afa3edc1bd61681 /Parser/tokenizer.c
parent7cfbf0c421137dfac5d9d2e4c879302ba5f80d88 (diff)
downloadcpython-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.c26
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 */