summaryrefslogtreecommitdiff
path: root/Objects
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2020-05-14 19:01:14 -0700
committerGuido van Rossum <guido@python.org>2020-05-14 19:01:14 -0700
commitf93a54c48fc1644012aa0d4ee3887c1d121ac40e (patch)
tree189c841245d15318e5895638105bdbc532cbcdf5 /Objects
parent31641ff0e4b18c8d002d019f4506f0e8fb446983 (diff)
parent16ab07063cb564c1937714bd39d6915172f005b5 (diff)
downloadcpython-git-fix-traceback-syntax-error.tar.gz
Merge branch 'master' into fix-traceback-syntax-errorfix-traceback-syntax-error
Diffstat (limited to 'Objects')
-rw-r--r--Objects/genobject.c22
-rw-r--r--Objects/unicodeobject.c70
2 files changed, 48 insertions, 44 deletions
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 5b253edfdc..fb01e581f8 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -217,6 +217,18 @@ gen_send_ex(PyGenObject *gen, PyObject *arg, int exc, int closing)
assert(f->f_back == NULL);
f->f_back = tstate->frame;
+ _PyErr_StackItem *gi_exc_state = &gen->gi_exc_state;
+ if (exc && gi_exc_state->exc_type != NULL &&
+ gi_exc_state->exc_type != Py_None)
+ {
+ Py_INCREF(gi_exc_state->exc_type);
+ Py_XINCREF(gi_exc_state->exc_value);
+ Py_XINCREF(gi_exc_state->exc_traceback);
+ _PyErr_ChainExceptions(gi_exc_state->exc_type,
+ gi_exc_state->exc_value,
+ gi_exc_state->exc_traceback);
+ }
+
gen->gi_running = 1;
gen->gi_exc_state.previous_item = tstate->exc_info;
tstate->exc_info = &gen->gi_exc_state;
@@ -512,16 +524,6 @@ throw_here:
}
PyErr_Restore(typ, val, tb);
-
- _PyErr_StackItem *gi_exc_state = &gen->gi_exc_state;
- if (gi_exc_state->exc_type != NULL && gi_exc_state->exc_type != Py_None) {
- Py_INCREF(gi_exc_state->exc_type);
- Py_XINCREF(gi_exc_state->exc_value);
- Py_XINCREF(gi_exc_state->exc_traceback);
- _PyErr_ChainExceptions(gi_exc_state->exc_type,
- gi_exc_state->exc_value,
- gi_exc_state->exc_traceback);
- }
return gen_send_ex(gen, Py_None, 1, 0);
failed_throw:
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 826298c23a..ea46a44bf5 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -463,7 +463,7 @@ unicode_check_encoding_errors(const char *encoding, const char *errors)
/* Avoid calling _PyCodec_Lookup() and PyCodec_LookupError() before the
codec registry is ready: before_PyUnicode_InitEncodings() is called. */
- if (!interp->fs_codec.encoding) {
+ if (!interp->unicode.fs_codec.encoding) {
return 0;
}
@@ -2289,8 +2289,8 @@ _PyUnicode_FromId(_Py_Identifier *id)
return id->object;
}
-void
-_PyUnicode_ClearStaticStrings()
+static void
+unicode_clear_static_strings(void)
{
_Py_Identifier *tmp, *s = static_strings;
while (s) {
@@ -3650,16 +3650,17 @@ PyObject *
PyUnicode_EncodeFSDefault(PyObject *unicode)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
- if (interp->fs_codec.utf8) {
+ struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+ if (fs_codec->utf8) {
return unicode_encode_utf8(unicode,
- interp->fs_codec.error_handler,
- interp->fs_codec.errors);
+ fs_codec->error_handler,
+ fs_codec->errors);
}
#ifndef _Py_FORCE_UTF8_FS_ENCODING
- else if (interp->fs_codec.encoding) {
+ else if (fs_codec->encoding) {
return PyUnicode_AsEncodedString(unicode,
- interp->fs_codec.encoding,
- interp->fs_codec.errors);
+ fs_codec->encoding,
+ fs_codec->errors);
}
#endif
else {
@@ -3886,17 +3887,18 @@ PyObject*
PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
- if (interp->fs_codec.utf8) {
+ struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+ if (fs_codec->utf8) {
return unicode_decode_utf8(s, size,
- interp->fs_codec.error_handler,
- interp->fs_codec.errors,
+ fs_codec->error_handler,
+ fs_codec->errors,
NULL);
}
#ifndef _Py_FORCE_UTF8_FS_ENCODING
- else if (interp->fs_codec.encoding) {
+ else if (fs_codec->encoding) {
return PyUnicode_Decode(s, size,
- interp->fs_codec.encoding,
- interp->fs_codec.errors);
+ fs_codec->encoding,
+ fs_codec->errors);
}
#endif
else {
@@ -16071,16 +16073,17 @@ init_fs_codec(PyInterpreterState *interp)
return -1;
}
- PyMem_RawFree(interp->fs_codec.encoding);
- interp->fs_codec.encoding = encoding;
+ struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
+ PyMem_RawFree(fs_codec->encoding);
+ fs_codec->encoding = encoding;
/* encoding has been normalized by init_fs_encoding() */
- interp->fs_codec.utf8 = (strcmp(encoding, "utf-8") == 0);
- PyMem_RawFree(interp->fs_codec.errors);
- interp->fs_codec.errors = errors;
- interp->fs_codec.error_handler = error_handler;
+ fs_codec->utf8 = (strcmp(encoding, "utf-8") == 0);
+ PyMem_RawFree(fs_codec->errors);
+ fs_codec->errors = errors;
+ fs_codec->error_handler = error_handler;
#ifdef _Py_FORCE_UTF8_FS_ENCODING
- assert(interp->fs_codec.utf8 == 1);
+ assert(fs_codec->utf8 == 1);
#endif
/* At this point, PyUnicode_EncodeFSDefault() and
@@ -16089,8 +16092,8 @@ init_fs_codec(PyInterpreterState *interp)
/* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
global configuration variables. */
- if (_Py_SetFileSystemEncoding(interp->fs_codec.encoding,
- interp->fs_codec.errors) < 0) {
+ if (_Py_SetFileSystemEncoding(fs_codec->encoding,
+ fs_codec->errors) < 0) {
PyErr_NoMemory();
return -1;
}
@@ -16133,15 +16136,14 @@ _PyUnicode_InitEncodings(PyThreadState *tstate)
static void
-_PyUnicode_FiniEncodings(PyThreadState *tstate)
+_PyUnicode_FiniEncodings(struct _Py_unicode_fs_codec *fs_codec)
{
- PyInterpreterState *interp = tstate->interp;
- PyMem_RawFree(interp->fs_codec.encoding);
- interp->fs_codec.encoding = NULL;
- interp->fs_codec.utf8 = 0;
- PyMem_RawFree(interp->fs_codec.errors);
- interp->fs_codec.errors = NULL;
- interp->fs_codec.error_handler = _Py_ERROR_UNKNOWN;
+ PyMem_RawFree(fs_codec->encoding);
+ fs_codec->encoding = NULL;
+ fs_codec->utf8 = 0;
+ PyMem_RawFree(fs_codec->errors);
+ fs_codec->errors = NULL;
+ fs_codec->error_handler = _Py_ERROR_UNKNOWN;
}
@@ -16196,10 +16198,10 @@ _PyUnicode_Fini(PyThreadState *tstate)
Py_CLEAR(unicode_latin1[i]);
}
#endif
- _PyUnicode_ClearStaticStrings();
+ unicode_clear_static_strings();
}
- _PyUnicode_FiniEncodings(tstate);
+ _PyUnicode_FiniEncodings(&tstate->interp->unicode.fs_codec);
}