diff -r dcbbff7e6b56 Include/errcode.h --- a/Include/errcode.h Sat Feb 15 13:01:41 2014 +0200 +++ b/Include/errcode.h Sat Feb 15 14:13:21 2014 +0200 @@ -31,6 +31,11 @@ #define E_LINECONT 25 /* Unexpected characters after a line continuation */ #define E_IDENTIFIER 26 /* Invalid characters in identifier */ #define E_BADSINGLE 27 /* Ill-formed single statement input */ +#define E_BADHEX 28 /* Bad digit in hex literal */ +#define E_BADOCTAL 29 /* Bad digit in octal literal */ +#define E_BADBINARY 30 /* Bad digit in binary literal */ +#define E_BADFLOAT 31 /* Bad digit in float literal */ +#define E_OLDOCTAL 32 /* Old octal syntax is not supported */ #ifdef __cplusplus } diff -r dcbbff7e6b56 Parser/tokenizer.c --- a/Parser/tokenizer.c Sat Feb 15 13:01:41 2014 +0200 +++ b/Parser/tokenizer.c Sat Feb 15 14:13:21 2014 +0200 @@ -1517,7 +1517,7 @@ /* Hex */ c = tok_nextc(tok); if (!isxdigit(c)) { - tok->done = E_TOKEN; + tok->done = E_BADHEX; tok_backup(tok, c); return ERRORTOKEN; } @@ -1529,7 +1529,7 @@ /* Octal */ c = tok_nextc(tok); if (c < '0' || c >= '8') { - tok->done = E_TOKEN; + tok->done = E_BADOCTAL; tok_backup(tok, c); return ERRORTOKEN; } @@ -1541,7 +1541,7 @@ /* Binary */ c = tok_nextc(tok); if (c != '0' && c != '1') { - tok->done = E_TOKEN; + tok->done = E_BADBINARY; tok_backup(tok, c); return ERRORTOKEN; } @@ -1566,7 +1566,7 @@ else if (c == 'j' || c == 'J') goto imaginary; else if (nonzero) { - tok->done = E_TOKEN; + tok->done = E_OLDOCTAL; tok_backup(tok, c); return ERRORTOKEN; } @@ -1593,7 +1593,7 @@ if (c == '+' || c == '-') c = tok_nextc(tok); if (!isdigit(c)) { - tok->done = E_TOKEN; + tok->done = E_BADFLOAT; tok_backup(tok, c); return ERRORTOKEN; } diff -r dcbbff7e6b56 Python/pythonrun.c --- a/Python/pythonrun.c Sat Feb 15 13:01:41 2014 +0200 +++ b/Python/pythonrun.c Sat Feb 15 14:13:21 2014 +0200 @@ -2539,6 +2539,21 @@ case E_BADSINGLE: msg = "multiple statements found while compiling a single statement"; break; + case E_BADHEX: + msg = "bad digit in hex literal"; + break; + case E_BADOCTAL: + msg = "bad digit in octal literal"; + break; + case E_BADBINARY: + msg = "bad digit in binary literal"; + break; + case E_BADFLOAT: + msg = "bad digit in float literal"; + break; + case E_OLDOCTAL: + msg = "decimal numbers may not have a lleading zero"; + break; default: fprintf(stderr, "error=%d\n", err->error); msg = "unknown parsing error";