diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-12 14:45:56 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-12 14:45:56 (GMT) |
commit | 52f6dd7a3dd9d672a23d7f654a46f126cfc74968 (patch) | |
tree | 34985c0029101f0a3897d200bc8fdaec754d746a /Parser | |
parent | 2743139031017874fba4b8cfe8f6f44c52789bee (diff) | |
download | cpython-52f6dd7a3dd9d672a23d7f654a46f126cfc74968.zip cpython-52f6dd7a3dd9d672a23d7f654a46f126cfc74968.tar.gz cpython-52f6dd7a3dd9d672a23d7f654a46f126cfc74968.tar.bz2 |
Merged revisions 78826 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines
Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
(SIGINT). If an error occurs while importing the site module, the error is
printed and Python exits. Initialize the GIL before importing the site
module.
........
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/tokenizer.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 50b0ff1..0e2dc3a 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1242,21 +1242,28 @@ indenterror(struct tok_state *tok) } #ifdef PGEN -#define verify_identifier(s,e) 1 +#define verify_identifier(tok) 1 #else /* Verify that the identifier follows PEP 3131. */ static int -verify_identifier(char *start, char *end) +verify_identifier(struct tok_state *tok) { PyObject *s; int result; - s = PyUnicode_DecodeUTF8(start, end-start, NULL); + s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL); if (s == NULL) { - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_Clear(); + tok->done = E_IDENTIFIER; + } else { + tok->done = E_ERROR; + } return 0; } result = PyUnicode_IsIdentifier(s); Py_DECREF(s); + if (result == 0) + tok->done = E_IDENTIFIER; return result; } #endif @@ -1405,7 +1412,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) } tok_backup(tok, c); if (nonascii && - !verify_identifier(tok->start, tok->cur)) { + !verify_identifier(tok)) { tok->done = E_IDENTIFIER; return ERRORTOKEN; } |