diff options
author | Steve Dower <steve.dower@python.org> | 2020-10-19 15:50:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-19 15:50:36 +0100 |
commit | c82f10450c547eb94a04ee17b7c816ff31948297 (patch) | |
tree | ad305c05c5745e1a5e7c136545bec7eefa741e32 /Python | |
parent | eee6bb50c69d94280f43b47390ea9d1b5f42930c (diff) | |
parent | b580ed1d9d55461d8dde027411b90be26cae131e (diff) | |
download | cpython-git-bpo-39107.tar.gz |
Merge branch 'master' into bpo-39107bpo-39107
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ast.c | 14 | ||||
-rw-r--r-- | Python/ast_opt.c | 24 | ||||
-rw-r--r-- | Python/ceval.c | 28 | ||||
-rw-r--r-- | Python/codecs.c | 50 | ||||
-rw-r--r-- | Python/compile.c | 33 | ||||
-rw-r--r-- | Python/dynload_aix.c | 184 | ||||
-rw-r--r-- | Python/dynload_dl.c | 23 | ||||
-rw-r--r-- | Python/dynload_hpux.c | 15 | ||||
-rw-r--r-- | Python/dynload_shlib.c | 4 | ||||
-rw-r--r-- | Python/errors.c | 19 | ||||
-rw-r--r-- | Python/fileutils.c | 76 | ||||
-rw-r--r-- | Python/future.c | 2 | ||||
-rw-r--r-- | Python/import.c | 23 | ||||
-rw-r--r-- | Python/importlib_external.h | 222 | ||||
-rw-r--r-- | Python/pystate.c | 1 | ||||
-rw-r--r-- | Python/pythonrun.c | 6 | ||||
-rw-r--r-- | Python/sysmodule.c | 152 |
17 files changed, 332 insertions, 544 deletions
diff --git a/Python/ast.c b/Python/ast.c index 4b7bbd229c..5e74f65a2c 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -1,18 +1,12 @@ /* - * This file includes functions to transform a concrete syntax tree (CST) to - * an abstract syntax tree (AST). The main function is PyAST_FromNode(). - * + * This file exposes PyAST_Validate interface to check the integrity + * of the given abstract syntax tree (potentially constructed manually). */ #include "Python.h" #include "Python-ast.h" #include "ast.h" -#include "token.h" -#include "pythonrun.h" #include <assert.h> -#include <stdbool.h> - -#define MAXLEVEL 200 /* Max parentheses level */ static int validate_stmts(asdl_stmt_seq *); static int validate_exprs(asdl_expr_seq*, expr_context_ty, int); @@ -62,7 +56,7 @@ validate_keywords(asdl_keyword_seq *keywords) { Py_ssize_t i; for (i = 0; i < asdl_seq_LEN(keywords); i++) - if (!validate_expr(((keyword_ty)asdl_seq_GET(keywords, i))->value, Load)) + if (!validate_expr((asdl_seq_GET(keywords, i))->value, Load)) return 0; return 1; } @@ -556,7 +550,7 @@ _PyAST_GetDocString(asdl_stmt_seq *body) if (!asdl_seq_LEN(body)) { return NULL; } - stmt_ty st = (stmt_ty)asdl_seq_GET(body, 0); + stmt_ty st = asdl_seq_GET(body, 0); if (st->kind != Expr_kind) { return NULL; } diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 5efaac4c89..22ca6f23ae 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -392,7 +392,6 @@ static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); -static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state); #define CALL(FUNC, TYPE, ARG) \ @@ -595,26 +594,12 @@ astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { - CALL_SEQ(astfold_arg, arg, node_->posonlyargs); - CALL_SEQ(astfold_arg, arg, node_->args); - CALL_OPT(astfold_arg, arg_ty, node_->vararg); - CALL_SEQ(astfold_arg, arg, node_->kwonlyargs); CALL_SEQ(astfold_expr, expr, node_->kw_defaults); - CALL_OPT(astfold_arg, arg_ty, node_->kwarg); CALL_SEQ(astfold_expr, expr, node_->defaults); return 1; } static int -astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) -{ - if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { - CALL_OPT(astfold_expr, expr_ty, node_->annotation); - } - return 1; -} - -static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) { switch (node_->kind) { @@ -622,17 +607,11 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args); CALL(astfold_body, asdl_seq, node_->v.FunctionDef.body); CALL_SEQ(astfold_expr, expr, node_->v.FunctionDef.decorator_list); - if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { - CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns); - } break; case AsyncFunctionDef_kind: CALL(astfold_arguments, arguments_ty, node_->v.AsyncFunctionDef.args); CALL(astfold_body, asdl_seq, node_->v.AsyncFunctionDef.body); CALL_SEQ(astfold_expr, expr, node_->v.AsyncFunctionDef.decorator_list); - if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { - CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns); - } break; case ClassDef_kind: CALL_SEQ(astfold_expr, expr, node_->v.ClassDef.bases); @@ -656,9 +635,6 @@ astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state) break; case AnnAssign_kind: CALL(astfold_expr, expr_ty, node_->v.AnnAssign.target); - if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) { - CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation); - } CALL_OPT(astfold_expr, expr_ty, node_->v.AnnAssign.value); break; case For_kind: diff --git a/Python/ceval.c b/Python/ceval.c index 6430e792b8..762de577e6 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -814,9 +814,6 @@ _Py_CheckRecursiveCall(PyThreadState *tstate, const char *where) return -1; } #endif - if (tstate->recursion_critical) - /* Somebody asked that we don't check for recursion. */ - return 0; if (tstate->overflowed) { if (tstate->recursion_depth > recursion_limit + 50) { /* Overflowing while handling an overflow. Give up. */ @@ -1701,7 +1698,7 @@ main_loop: PyObject *right = POP(); PyObject *left = TOP(); PyObject *sum; - /* NOTE(haypo): Please don't try to micro-optimize int+int on + /* NOTE(vstinner): Please don't try to micro-optimize int+int on CPython using bytecode, it is simply worthless. See http://bugs.python.org/issue21955 and http://bugs.python.org/issue10044 for the discussion. In short, @@ -2213,24 +2210,17 @@ main_loop: case TARGET(YIELD_FROM): { PyObject *v = POP(); PyObject *receiver = TOP(); - int is_gen_or_coro = PyGen_CheckExact(receiver) || PyCoro_CheckExact(receiver); - int gen_status; - if (tstate->c_tracefunc == NULL && is_gen_or_coro) { - gen_status = PyGen_Send((PyGenObject *)receiver, v, &retval); + PySendResult gen_status; + if (tstate->c_tracefunc == NULL) { + gen_status = PyIter_Send(receiver, v, &retval); } else { - if (is_gen_or_coro) { - retval = _PyGen_Send((PyGenObject *)receiver, v); + _Py_IDENTIFIER(send); + if (v == Py_None && PyIter_Check(receiver)) { + retval = Py_TYPE(receiver)->tp_iternext(receiver); } else { - _Py_IDENTIFIER(send); - if (v == Py_None) { - retval = Py_TYPE(receiver)->tp_iternext(receiver); - } - else { - retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v); - } + retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v); } - if (retval == NULL) { if (tstate->c_tracefunc != NULL && _PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) @@ -2311,7 +2301,6 @@ main_loop: } case TARGET(POP_BLOCK): { - PREDICTED(POP_BLOCK); PyFrame_BlockPop(f); DISPATCH(); } @@ -3366,7 +3355,6 @@ main_loop: STACK_SHRINK(1); Py_DECREF(iter); JUMPBY(oparg); - PREDICT(POP_BLOCK); DISPATCH(); } diff --git a/Python/codecs.c b/Python/codecs.c index 0f18c27e5f..ade1418720 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -50,6 +50,31 @@ int PyCodec_Register(PyObject *search_function) return -1; } +int +PyCodec_Unregister(PyObject *search_function) +{ + PyInterpreterState *interp = PyInterpreterState_Get(); + PyObject *codec_search_path = interp->codec_search_path; + /* Do nothing if codec_search_path is not created yet or was cleared. */ + if (codec_search_path == NULL) { + return 0; + } + + assert(PyList_CheckExact(codec_search_path)); + Py_ssize_t n = PyList_GET_SIZE(codec_search_path); + for (Py_ssize_t i = 0; i < n; i++) { + PyObject *item = PyList_GET_ITEM(codec_search_path, i); + if (item == search_function) { + if (interp->codec_search_cache != NULL) { + assert(PyDict_CheckExact(interp->codec_search_cache)); + PyDict_Clear(interp->codec_search_cache); + } + return PyList_SetSlice(codec_search_path, i, i+1, NULL); + } + } + return 0; +} + extern int _Py_normalize_encoding(const char *, char *, size_t); /* Convert a string to a normalized Python string(decoded from UTF-8): all characters are @@ -183,31 +208,6 @@ PyObject *_PyCodec_Lookup(const char *encoding) return NULL; } -int _PyCodec_Forget(const char *encoding) -{ - PyObject *v; - int result; - - PyInterpreterState *interp = _PyInterpreterState_GET(); - if (interp->codec_search_path == NULL) { - return -1; - } - - /* Convert the encoding to a normalized Python string: all - characters are converted to lower case, spaces and hyphens are - replaced with underscores. */ - v = normalizestring(encoding); - if (v == NULL) { - return -1; - } - - /* Drop the named codec from the internal cache */ - result = PyDict_DelItem(interp->codec_search_cache, v); - Py_DECREF(v); - - return result; -} - /* Codec registry encoding check API. */ int PyCodec_KnownEncoding(const char *encoding) diff --git a/Python/compile.c b/Python/compile.c index 0f9e5c276c..ddd2a04962 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -108,8 +108,8 @@ It's called a frame block to distinguish it from a basic block in the compiler IR. */ -enum fblocktype { WHILE_LOOP, FOR_LOOP, EXCEPT, FINALLY_TRY, FINALLY_END, - WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE }; +enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END, + WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER }; struct fblockinfo { enum fblocktype fb_type; @@ -1623,9 +1623,7 @@ compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b, { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { - PyErr_SetString(PyExc_SyntaxError, - "too many statically nested blocks"); - return 0; + return compiler_error(c, "too many statically nested blocks"); } f = &c->u->u_fblock[c->u->u_nfblocks++]; f->fb_type = t; @@ -1665,6 +1663,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, { switch (info->fb_type) { case WHILE_LOOP: + case EXCEPTION_HANDLER: return 1; case FOR_LOOP: @@ -1675,7 +1674,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, ADDOP(c, POP_TOP); return 1; - case EXCEPT: + case TRY_EXCEPT: ADDOP(c, POP_BLOCK); return 1; @@ -2027,12 +2026,7 @@ compiler_visit_argannotation(struct compiler *c, identifier id, { if (annotation) { PyObject *mangled; - if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { - VISIT(c, annexpr, annotation) - } - else { - VISIT(c, expr, annotation); - } + VISIT(c, annexpr, annotation); mangled = _Py_Mangle(c->u->u_private, id); if (!mangled) return 0; @@ -3060,14 +3054,17 @@ compiler_try_except(struct compiler *c, stmt_ty s) return 0; ADDOP_JUMP(c, SETUP_FINALLY, except); compiler_use_next_block(c, body); - if (!compiler_push_fblock(c, EXCEPT, body, NULL, NULL)) + if (!compiler_push_fblock(c, TRY_EXCEPT, body, NULL, NULL)) return 0; VISIT_SEQ(c, stmt, s->v.Try.body); ADDOP(c, POP_BLOCK); - compiler_pop_fblock(c, EXCEPT, body); + compiler_pop_fblock(c, TRY_EXCEPT, body); ADDOP_JUMP(c, JUMP_FORWARD, orelse); n = asdl_seq_LEN(s->v.Try.handlers); compiler_use_next_block(c, except); + /* Runtime will push a block here, so we need to account for that */ + if (!compiler_push_fblock(c, EXCEPTION_HANDLER, NULL, NULL, NULL)) + return 0; for (i = 0; i < n; i++) { excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET( s->v.Try.handlers, i); @@ -3152,6 +3149,7 @@ compiler_try_except(struct compiler *c, stmt_ty s) } compiler_use_next_block(c, except); } + compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL); ADDOP(c, RERAISE); compiler_use_next_block(c, orelse); VISIT_SEQ(c, stmt, s->v.Try.orelse); @@ -5258,12 +5256,7 @@ compiler_annassign(struct compiler *c, stmt_ty s) if (s->v.AnnAssign.simple && (c->u->u_scope_type == COMPILER_SCOPE_MODULE || c->u->u_scope_type == COMPILER_SCOPE_CLASS)) { - if (c->c_future->ff_features & CO_FUTURE_ANNOTATIONS) { - VISIT(c, annexpr, s->v.AnnAssign.annotation) - } - else { - VISIT(c, expr, s->v.AnnAssign.annotation); - } + VISIT(c, annexpr, s->v.AnnAssign.annotation); ADDOP_NAME(c, LOAD_NAME, __annotations__, names); mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id); ADDOP_LOAD_CONST_NEW(c, mangled); diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c deleted file mode 100644 index 684f10a8b9..0000000000 --- a/Python/dynload_aix.c +++ /dev/null @@ -1,184 +0,0 @@ - -/* Support for dynamic loading of extension modules */ - -#include "Python.h" -#include "importdl.h" - -#include <errno.h> /* for global errno */ -#include <string.h> /* for strerror() */ -#include <stdlib.h> /* for malloc(), free() */ -#include <sys/ldr.h> - - -#ifdef AIX_GENUINE_CPLUSPLUS -#include <load.h> -#define aix_load loadAndInit -#else -#define aix_load load -#endif - - -extern char *Py_GetProgramName(void); - -typedef struct Module { - struct Module *next; - void *entry; -} Module, *ModulePtr; - -const char *_PyImport_DynLoadFiletab[] = {".so", NULL}; - -static int -aix_getoldmodules(void **modlistptr) -{ - ModulePtr modptr, prevmodptr; - struct ld_info *ldiptr; - char *ldibuf; - int errflag, bufsize = 1024; - unsigned int offset; - char *progname = Py_GetProgramName(); - - /* - -- Get the list of loaded modules into ld_info structures. - */ - if ((ldibuf = malloc(bufsize)) == NULL) { - PyErr_SetString(PyExc_ImportError, strerror(errno)); - return -1; - } - while ((errflag = loadquery(L_GETINFO, ldibuf, bufsize)) == -1 - && errno == ENOMEM) { - free(ldibuf); - bufsize += 1024; - if ((ldibuf = malloc(bufsize)) == NULL) { - PyErr_SetString(PyExc_ImportError, strerror(errno)); - return -1; - } - } - if (errflag == -1) { - PyErr_SetString(PyExc_ImportError, strerror(errno)); - return -1; - } - /* - -- Make the modules list from the ld_info structures. - */ - ldiptr = (struct ld_info *)ldibuf; - prevmodptr = NULL; - do { - if (strstr(progname, ldiptr->ldinfo_filename) == NULL && - strstr(ldiptr->ldinfo_filename, "python") == NULL) { - /* - -- Extract only the modules belonging to the main - -- executable + those containing "python" as a - -- substring (like the "python[version]" binary or - -- "libpython[version].a" in case it's a shared lib). - */ - offset = (unsigned int)ldiptr->ldinfo_next; - ldiptr = (struct ld_info *)((char*)ldiptr + offset); - continue; - } - if ((modptr = (ModulePtr)malloc(sizeof(Module))) == NULL) { - PyErr_SetString(PyExc_ImportError, strerror(errno)); - while (*modlistptr) { - modptr = (ModulePtr)*modlistptr; - *modlistptr = (void *)modptr->next; - free(modptr); - } - return -1; - } - modptr->entry = ldiptr->ldinfo_dataorg; - modptr->next = NULL; - if (prevmodptr == NULL) - *modlistptr = (void *)modptr; - else - prevmodptr->next = modptr; - prevmodptr = modptr; - offset = (unsigned int)ldiptr->ldinfo_next; - ldiptr = (struct ld_info *)((char*)ldiptr + offset); - } while (offset); - free(ldibuf); - return 0; -} - - -static void -aix_loaderror(const char *pathname) -{ - - char *message[1024], errbuf[1024]; - PyObject *pathname_ob = NULL; - PyObject *errbuf_ob = NULL; - int i,j; - - struct errtab { - int errNo; - char *errstr; - } load_errtab[] = { - {L_ERROR_TOOMANY, "too many errors, rest skipped."}, - {L_ERROR_NOLIB, "can't load library:"}, - {L_ERROR_UNDEF, "can't find symbol in library:"}, - {L_ERROR_RLDBAD, - "RLD index out of range or bad relocation type:"}, - {L_ERROR_FORMAT, "not a valid, executable xcoff file:"}, - {L_ERROR_MEMBER, - "file not an archive or does not contain requested member:"}, - {L_ERROR_TYPE, "symbol table mismatch:"}, - {L_ERROR_ALIGN, "text alignment in file is wrong."}, - {L_ERROR_SYSTEM, "System error:"}, - {L_ERROR_ERRNO, NULL} - }; - -#define ERRBUF_APPEND(s) strncat(errbuf, s, sizeof(errbuf)-strlen(errbuf)-1) - - PyOS_snprintf(errbuf, sizeof(errbuf), "from module %.200s ", pathname); - - if (!loadquery(L_GETMESSAGES, &message[0], sizeof(message))) { - ERRBUF_APPEND(strerror(errno)); - ERRBUF_APPEND("\n"); - } - for(i = 0; message[i] && *message[i]; i++) { - int nerr = atoi(message[i]); - for (j=0; j < Py_ARRAY_LENGTH(load_errtab); j++) { - if (nerr == load_errtab[j].errNo && load_errtab[j].errstr) - ERRBUF_APPEND(load_errtab[j].errstr); - } - while (Py_ISDIGIT(*message[i])) message[i]++ ; - ERRBUF_APPEND(message[i]); - ERRBUF_APPEND("\n"); - } - errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */ - pathname_ob = PyUnicode_FromString(pathname); - errbuf_ob = PyUnicode_FromString(errbuf); - PyErr_SetImportError(errbuf_ob, NULL, pathname); - Py_DECREF(pathname_ob); - Py_DECREF(errbuf_ob); - return; -} - - -dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, - const char *shortname, - const char *pathname, FILE *fp) -{ - dl_funcptr p; - - /* - -- Invoke load() with L_NOAUTODEFER leaving the imported symbols - -- of the shared module unresolved. Thus we have to resolve them - -- explicitly with loadbind. The new module is loaded, then we - -- resolve its symbols using the list of already loaded modules - -- (only those that belong to the python executable). Get these - -- with loadquery(L_GETINFO). - */ - - static void *staticmodlistptr = NULL; - - if (!staticmodlistptr) - if (aix_getoldmodules(&staticmodlistptr) == -1) - return NULL; - p = (dl_funcptr) aix_load((char *)pathname, L_NOAUTODEFER, 0); - if (p == NULL) { - aix_loaderror(pathname); - return NULL; - } - - return p; -} diff --git a/Python/dynload_dl.c b/Python/dynload_dl.c deleted file mode 100644 index 2bec645fbd..0000000000 --- a/Python/dynload_dl.c +++ /dev/null @@ -1,23 +0,0 @@ - -/* Support for dynamic loading of extension modules */ - -#include "dl.h" - -#include "Python.h" -#include "importdl.h" - - -extern char *Py_GetProgramName(void); - -const char *_PyImport_DynLoadFiletab[] = {".o", NULL}; - - -dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, - const char *shortname, - const char *pathname, FILE *fp) -{ - char funcname[258]; - - PyOS_snprintf(funcname, sizeof(funcname), "%.20s_%.200s", prefix, shortname); - return dl_loadmod(Py_GetProgramName(), pathname, funcname); -} diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c index 4b964a69d3..e36d608c6d 100644 --- a/Python/dynload_hpux.c +++ b/Python/dynload_hpux.c @@ -36,9 +36,20 @@ dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, char buf[256]; PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s", pathname); - PyObject *buf_ob = PyUnicode_FromString(buf); + PyObject *buf_ob = PyUnicode_DecodeFSDefault(buf); + if (buf_ob == NULL) + return NULL; PyObject *shortname_ob = PyUnicode_FromString(shortname); - PyObject *pathname_ob = PyUnicode_FromString(pathname); + if (shortname_ob == NULL) { + Py_DECREF(buf_ob); + return NULL; + } + PyObject *pathname_ob = PyUnicode_DecodeFSDefault(pathname); + if (pathname_ob == NULL) { + Py_DECREF(buf_ob); + Py_DECREF(shortname_ob); + return NULL; + } PyErr_SetImportError(buf_ob, shortname_ob, pathname_ob); Py_DECREF(buf_ob); Py_DECREF(shortname_ob); diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 082154dd91..23828898d3 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -106,7 +106,7 @@ _PyImport_FindSharedFuncptr(const char *prefix, const char *error = dlerror(); if (error == NULL) error = "unknown dlopen() error"; - error_ob = PyUnicode_FromString(error); + error_ob = PyUnicode_DecodeLocale(error, "surrogateescape"); if (error_ob == NULL) return NULL; mod_name = PyUnicode_FromString(shortname); @@ -114,7 +114,7 @@ _PyImport_FindSharedFuncptr(const char *prefix, Py_DECREF(error_ob); return NULL; } - path = PyUnicode_FromString(pathname); + path = PyUnicode_DecodeFSDefault(pathname); if (path == NULL) { Py_DECREF(error_ob); Py_DECREF(mod_name); diff --git a/Python/errors.c b/Python/errors.c index 720f18bc22..02cf47992b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1593,9 +1593,18 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) } Py_DECREF(tmp); } + else { + _PyErr_Clear(tstate); + } } if (exc != PyExc_SyntaxError) { - if (!_PyObject_HasAttrId(v, &PyId_msg)) { + if (_PyObject_LookupAttrId(v, &PyId_msg, &tmp) < 0) { + _PyErr_Clear(tstate); + } + else if (tmp) { + Py_DECREF(tmp); + } + else { tmp = PyObject_Str(v); if (tmp) { if (_PyObject_SetAttrId(v, &PyId_msg, tmp)) { @@ -1607,7 +1616,13 @@ PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) _PyErr_Clear(tstate); } } - if (!_PyObject_HasAttrId(v, &PyId_print_file_and_line)) { + if (_PyObject_LookupAttrId(v, &PyId_print_file_and_line, &tmp) < 0) { + _PyErr_Clear(tstate); + } + else if (tmp) { + Py_DECREF(tmp); + } + else { if (_PyObject_SetAttrId(v, &PyId_print_file_and_line, Py_None)) { _PyErr_Clear(tstate); diff --git a/Python/fileutils.c b/Python/fileutils.c index 50ef3c174a..b79067f2b5 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -2106,3 +2106,79 @@ done: PyMem_Free(oldloc); return res; } + +/* Our selection logic for which function to use is as follows: + * 1. If close_range(2) is available, always prefer that; it's better for + * contiguous ranges like this than fdwalk(3) which entails iterating over + * the entire fd space and simply doing nothing for those outside the range. + * 2. If closefrom(2) is available, we'll attempt to use that next if we're + * closing up to sysconf(_SC_OPEN_MAX). + * 2a. Fallback to fdwalk(3) if we're not closing up to sysconf(_SC_OPEN_MAX), + * as that will be more performant if the range happens to have any chunk of + * non-opened fd in the middle. + * 2b. If fdwalk(3) isn't available, just do a plain close(2) loop. + */ +#ifdef __FreeBSD__ +# define USE_CLOSEFROM +#endif /* __FreeBSD__ */ + +#ifdef HAVE_FDWALK +# define USE_FDWALK +#endif /* HAVE_FDWALK */ + +#ifdef USE_FDWALK +static int +_fdwalk_close_func(void *lohi, int fd) +{ + int lo = ((int *)lohi)[0]; + int hi = ((int *)lohi)[1]; + + if (fd >= hi) { + return 1; + } + else if (fd >= lo) { + /* Ignore errors */ + (void)close(fd); + } + return 0; +} +#endif /* USE_FDWALK */ + +/* Closes all file descriptors in [first, last], ignoring errors. */ +void +_Py_closerange(int first, int last) +{ + first = Py_MAX(first, 0); + _Py_BEGIN_SUPPRESS_IPH +#ifdef HAVE_CLOSE_RANGE + if (close_range(first, last, 0) == 0 || errno != ENOSYS) { + /* Any errors encountered while closing file descriptors are ignored; + * ENOSYS means no kernel support, though, + * so we'll fallback to the other methods. */ + } + else +#endif /* HAVE_CLOSE_RANGE */ +#ifdef USE_CLOSEFROM + if (last >= sysconf(_SC_OPEN_MAX)) { + /* Any errors encountered while closing file descriptors are ignored */ + closefrom(first); + } + else +#endif /* USE_CLOSEFROM */ +#ifdef USE_FDWALK + { + int lohi[2]; + lohi[0] = first; + lohi[1] = last + 1; + fdwalk(_fdwalk_close_func, lohi); + } +#else + { + for (int i = first; i <= last; i++) { + /* Ignore errors */ + (void)close(i); + } + } +#endif /* USE_FDWALK */ + _Py_END_SUPPRESS_IPH +} diff --git a/Python/future.c b/Python/future.c index 3cea4fee78..4b73eb6412 100644 --- a/Python/future.c +++ b/Python/future.c @@ -41,7 +41,7 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) } else if (strcmp(feature, FUTURE_GENERATOR_STOP) == 0) { continue; } else if (strcmp(feature, FUTURE_ANNOTATIONS) == 0) { - ff->ff_features |= CO_FUTURE_ANNOTATIONS; + continue; } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); diff --git a/Python/import.c b/Python/import.c index 505688400e..26b80f320c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -902,7 +902,11 @@ PyImport_AddModule(const char *name) } -/* Remove name from sys.modules, if it's there. */ +/* Remove name from sys.modules, if it's there. + * Can be called with an exception raised. + * If fail to remove name a new exception will be chained with the old + * exception, otherwise the old exception is preserved. + */ static void remove_module(PyThreadState *tstate, PyObject *name) { @@ -910,18 +914,17 @@ remove_module(PyThreadState *tstate, PyObject *name) _PyErr_Fetch(tstate, &type, &value, &traceback); PyObject *modules = tstate->interp->modules; - if (!PyMapping_HasKey(modules, name)) { - goto out; + if (PyDict_CheckExact(modules)) { + PyObject *mod = _PyDict_Pop(modules, name, Py_None); + Py_XDECREF(mod); } - if (PyMapping_DelItem(modules, name) < 0) { - _PyErr_SetString(tstate, PyExc_RuntimeError, - "deleting key in sys.modules failed"); - _PyErr_ChainExceptions(type, value, traceback); - return; + else if (PyMapping_DelItem(modules, name) < 0) { + if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { + _PyErr_Clear(tstate); + } } -out: - _PyErr_Restore(tstate, type, value, traceback); + _PyErr_ChainExceptions(type, value, traceback); } diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 0ef1b45594..6daddb1fb8 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -285,7 +285,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,218,13,95,119,114,105,116,101,95,97,116,111,109,105,99, 120,0,0,0,115,28,0,0,0,0,5,16,1,6,1,22, 255,4,2,2,3,14,1,40,1,16,1,12,1,2,1,14, - 1,12,1,6,1,114,69,0,0,0,105,97,13,0,0,114, + 1,12,1,6,1,114,69,0,0,0,105,102,13,0,0,114, 28,0,0,0,114,17,0,0,0,115,2,0,0,0,13,10, 90,11,95,95,112,121,99,97,99,104,101,95,95,122,4,111, 112,116,45,122,3,46,112,121,122,4,46,112,121,99,78,41, @@ -399,7 +399,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,109, 101,218,8,102,105,108,101,110,97,109,101,114,5,0,0,0, 114,5,0,0,0,114,8,0,0,0,218,17,99,97,99,104, - 101,95,102,114,111,109,95,115,111,117,114,99,101,45,1,0, + 101,95,102,114,111,109,95,115,111,117,114,99,101,46,1,0, 0,115,72,0,0,0,0,18,8,1,6,1,2,255,4,2, 8,1,4,1,8,1,12,1,10,1,12,1,16,1,8,1, 8,1,8,1,24,1,8,1,12,1,6,2,8,1,8,1, @@ -480,7 +480,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, 97,115,101,95,102,105,108,101,110,97,109,101,114,5,0,0, 0,114,5,0,0,0,114,8,0,0,0,218,17,115,111,117, - 114,99,101,95,102,114,111,109,95,99,97,99,104,101,116,1, + 114,99,101,95,102,114,111,109,95,99,97,99,104,101,117,1, 0,0,115,60,0,0,0,0,9,12,1,8,1,10,1,12, 1,4,1,10,1,12,1,14,1,16,1,4,1,4,1,12, 1,8,1,8,1,2,255,8,2,10,1,8,1,16,1,10, @@ -516,7 +516,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, 95,112,97,116,104,114,5,0,0,0,114,5,0,0,0,114, 8,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, - 101,102,105,108,101,156,1,0,0,115,20,0,0,0,0,7, + 101,102,105,108,101,157,1,0,0,115,20,0,0,0,0,7, 12,1,4,1,16,1,24,1,4,1,2,1,12,1,16,1, 18,1,114,108,0,0,0,99,1,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0, @@ -529,7 +529,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,114,101,0,0,0,114,97,0,0,0,114,82,0,0,0, 114,88,0,0,0,41,1,114,96,0,0,0,114,5,0,0, 0,114,5,0,0,0,114,8,0,0,0,218,11,95,103,101, - 116,95,99,97,99,104,101,100,175,1,0,0,115,16,0,0, + 116,95,99,97,99,104,101,100,176,1,0,0,115,16,0,0, 0,0,1,14,1,2,1,10,1,12,1,6,1,14,1,4, 2,114,112,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115, @@ -543,7 +543,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,233,128,0,0,0,41,3,114,49,0,0,0,114,51, 0,0,0,114,50,0,0,0,41,2,114,44,0,0,0,114, 52,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,187, + 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,188, 1,0,0,115,12,0,0,0,0,2,2,1,14,1,12,1, 10,3,8,1,114,114,0,0,0,99,1,0,0,0,0,0, 0,0,0,0,0,0,3,0,0,0,8,0,0,0,3,0, @@ -582,7 +582,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 103,115,218,6,107,119,97,114,103,115,169,1,218,6,109,101, 116,104,111,100,114,5,0,0,0,114,8,0,0,0,218,19, 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, - 112,101,114,207,1,0,0,115,18,0,0,0,0,1,8,1, + 112,101,114,208,1,0,0,115,18,0,0,0,0,1,8,1, 8,1,10,1,4,1,8,255,2,1,2,255,6,2,122,40, 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, 97,108,115,62,46,95,99,104,101,99,107,95,110,97,109,101, @@ -600,7 +600,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 95,100,105,99,116,95,95,218,6,117,112,100,97,116,101,41, 3,90,3,110,101,119,90,3,111,108,100,114,67,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 5,95,119,114,97,112,218,1,0,0,115,8,0,0,0,0, + 5,95,119,114,97,112,219,1,0,0,115,8,0,0,0,0, 1,8,1,10,1,20,1,122,26,95,99,104,101,99,107,95, 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,119, 114,97,112,41,1,78,41,3,218,10,95,98,111,111,116,115, @@ -608,7 +608,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,114,111,114,41,3,114,122,0,0,0,114,123,0,0,0, 114,133,0,0,0,114,5,0,0,0,114,121,0,0,0,114, 8,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, - 101,199,1,0,0,115,14,0,0,0,0,8,14,7,2,1, + 101,200,1,0,0,115,14,0,0,0,0,8,14,7,2,1, 10,1,12,2,14,5,10,1,114,136,0,0,0,99,2,0, 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, 0,0,67,0,0,0,115,60,0,0,0,124,0,160,0,124, @@ -636,7 +636,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, 3,109,115,103,114,5,0,0,0,114,5,0,0,0,114,8, 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, - 101,95,115,104,105,109,227,1,0,0,115,10,0,0,0,0, + 101,95,115,104,105,109,228,1,0,0,115,10,0,0,0,0, 10,14,1,16,1,4,1,22,1,114,143,0,0,0,99,3, 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4, 0,0,0,67,0,0,0,115,166,0,0,0,124,0,100,1, @@ -703,7 +703,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,95,100,101,116,97,105,108,115,90,5,109,97,103,105,99, 114,92,0,0,0,114,2,0,0,0,114,5,0,0,0,114, 5,0,0,0,114,8,0,0,0,218,13,95,99,108,97,115, - 115,105,102,121,95,112,121,99,244,1,0,0,115,28,0,0, + 115,105,102,121,95,112,121,99,245,1,0,0,115,28,0,0, 0,0,16,12,1,8,1,16,1,12,1,16,1,12,1,10, 1,12,1,8,1,16,2,8,1,16,1,16,1,114,152,0, 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,6, @@ -758,7 +758,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,116,0,0,0,114,151,0,0,0,114,92,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,23, 95,118,97,108,105,100,97,116,101,95,116,105,109,101,115,116, - 97,109,112,95,112,121,99,21,2,0,0,115,16,0,0,0, + 97,109,112,95,112,121,99,22,2,0,0,115,16,0,0,0, 0,19,24,1,10,1,12,1,16,1,8,1,22,255,2,2, 114,156,0,0,0,99,4,0,0,0,0,0,0,0,0,0, 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,42, @@ -804,7 +804,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 218,11,115,111,117,114,99,101,95,104,97,115,104,114,116,0, 0,0,114,151,0,0,0,114,5,0,0,0,114,5,0,0, 0,114,8,0,0,0,218,18,95,118,97,108,105,100,97,116, - 101,95,104,97,115,104,95,112,121,99,49,2,0,0,115,12, + 101,95,104,97,115,104,95,112,121,99,50,2,0,0,115,12, 0,0,0,0,17,16,1,2,1,8,255,4,2,2,254,114, 158,0,0,0,99,4,0,0,0,0,0,0,0,0,0,0, 0,5,0,0,0,5,0,0,0,67,0,0,0,115,80,0, @@ -828,7 +828,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,116,0,0,0,114,106,0,0,0,114,107,0, 0,0,218,4,99,111,100,101,114,5,0,0,0,114,5,0, 0,0,114,8,0,0,0,218,17,95,99,111,109,112,105,108, - 101,95,98,121,116,101,99,111,100,101,73,2,0,0,115,18, + 101,95,98,121,116,101,99,111,100,101,74,2,0,0,115,18, 0,0,0,0,2,10,1,10,1,12,1,8,1,12,1,4, 2,10,1,4,255,114,165,0,0,0,114,73,0,0,0,99, 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, @@ -847,7 +847,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,155,0,0,0,114,26,0,0,0,114,5,0,0,0,114, 5,0,0,0,114,8,0,0,0,218,22,95,99,111,100,101, 95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,86,2,0,0,115,12,0,0,0,0,2,8,1,14,1, + 99,87,2,0,0,115,12,0,0,0,0,2,8,1,14,1, 14,1,14,1,16,1,114,170,0,0,0,84,99,3,0,0, 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, 0,67,0,0,0,115,80,0,0,0,116,0,116,1,131,1, @@ -865,7 +865,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 7,99,104,101,99,107,101,100,114,26,0,0,0,114,2,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0, 0,218,17,95,99,111,100,101,95,116,111,95,104,97,115,104, - 95,112,121,99,96,2,0,0,115,14,0,0,0,0,2,8, + 95,112,121,99,97,2,0,0,115,14,0,0,0,0,2,8, 1,12,1,14,1,16,1,10,1,16,1,114,171,0,0,0, 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, 0,6,0,0,0,67,0,0,0,115,62,0,0,0,100,1, @@ -892,7 +892,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 108,105,110,101,218,8,101,110,99,111,100,105,110,103,90,15, 110,101,119,108,105,110,101,95,100,101,99,111,100,101,114,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,13, - 100,101,99,111,100,101,95,115,111,117,114,99,101,107,2,0, + 100,101,99,111,100,101,95,115,111,117,114,99,101,108,2,0, 0,115,10,0,0,0,0,5,8,1,12,1,10,1,12,1, 114,176,0,0,0,169,2,114,140,0,0,0,218,26,115,117, 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, @@ -954,7 +954,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,90,7,100,105,114,110,97,109,101,114,5,0,0,0,114, 5,0,0,0,114,8,0,0,0,218,23,115,112,101,99,95, 102,114,111,109,95,102,105,108,101,95,108,111,99,97,116,105, - 111,110,124,2,0,0,115,62,0,0,0,0,12,8,4,4, + 111,110,125,2,0,0,115,62,0,0,0,0,12,8,4,4, 1,10,2,2,1,14,1,12,1,6,2,10,8,16,1,6, 3,8,1,14,1,14,1,10,1,6,1,6,2,4,3,8, 2,10,1,2,1,14,1,12,1,6,2,4,1,8,2,6, @@ -991,7 +991,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 65,76,95,77,65,67,72,73,78,69,41,2,218,3,99,108, 115,114,7,0,0,0,114,5,0,0,0,114,5,0,0,0, 114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103, - 105,115,116,114,121,204,2,0,0,115,8,0,0,0,0,2, + 105,115,116,114,121,205,2,0,0,115,8,0,0,0,0,2, 2,1,16,1,12,1,122,36,87,105,110,100,111,119,115,82, 101,103,105,115,116,114,121,70,105,110,100,101,114,46,95,111, 112,101,110,95,114,101,103,105,115,116,114,121,99,2,0,0, @@ -1018,7 +1018,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 95,107,101,121,114,7,0,0,0,90,4,104,107,101,121,218, 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, 0,0,0,114,8,0,0,0,218,16,95,115,101,97,114,99, - 104,95,114,101,103,105,115,116,114,121,211,2,0,0,115,24, + 104,95,114,101,103,105,115,116,114,121,212,2,0,0,115,24, 0,0,0,0,2,6,1,8,2,6,1,6,1,16,255,6, 2,2,1,12,1,46,1,12,1,8,1,122,38,87,105,110, 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, @@ -1040,7 +1040,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,44,0,0,0,218,6,116,97,114,103,101,116, 114,199,0,0,0,114,140,0,0,0,114,189,0,0,0,114, 187,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,9,102,105,110,100,95,115,112,101,99,226,2, + 0,0,0,218,9,102,105,110,100,95,115,112,101,99,227,2, 0,0,115,28,0,0,0,0,2,10,1,8,1,4,1,2, 1,12,1,12,1,8,1,14,1,14,1,6,1,8,1,2, 254,6,3,122,31,87,105,110,100,111,119,115,82,101,103,105, @@ -1059,7 +1059,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 78,169,2,114,203,0,0,0,114,140,0,0,0,169,4,114, 193,0,0,0,114,139,0,0,0,114,44,0,0,0,114,187, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,242, + 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,243, 2,0,0,115,8,0,0,0,0,7,12,1,8,1,6,2, 122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114, 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, @@ -1069,7 +1069,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 11,99,108,97,115,115,109,101,116,104,111,100,114,194,0,0, 0,114,200,0,0,0,114,203,0,0,0,114,206,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,114,191,0,0,0,192,2,0,0,115,28,0, + 8,0,0,0,114,191,0,0,0,193,2,0,0,115,28,0, 0,0,8,2,4,3,2,255,2,4,2,255,2,3,4,2, 2,1,10,6,2,1,10,14,2,1,12,15,2,1,114,191, 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1105,7 +1105,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,139,0,0,0,114,96,0,0,0,90,13,102,105,108, 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108, 95,110,97,109,101,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,114,182,0,0,0,5,3,0,0,115,8,0, + 8,0,0,0,114,182,0,0,0,6,3,0,0,115,8,0, 0,0,0,3,18,1,16,1,14,1,122,24,95,76,111,97, 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99, 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, @@ -1116,7 +1116,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 105,111,110,46,78,114,5,0,0,0,169,2,114,118,0,0, 0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0, 114,8,0,0,0,218,13,99,114,101,97,116,101,95,109,111, - 100,117,108,101,13,3,0,0,115,2,0,0,0,0,1,122, + 100,117,108,101,14,3,0,0,115,2,0,0,0,0,1,122, 27,95,76,111,97,100,101,114,66,97,115,105,99,115,46,99, 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,5,0,0, @@ -1136,7 +1136,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,114,131,0,0,0,41,3,114,118,0,0,0,218,6,109, 111,100,117,108,101,114,164,0,0,0,114,5,0,0,0,114, 5,0,0,0,114,8,0,0,0,218,11,101,120,101,99,95, - 109,111,100,117,108,101,16,3,0,0,115,12,0,0,0,0, + 109,111,100,117,108,101,17,3,0,0,115,12,0,0,0,0, 2,12,1,8,1,6,1,4,255,6,2,122,25,95,76,111, 97,100,101,114,66,97,115,105,99,115,46,101,120,101,99,95, 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, @@ -1148,13 +1148,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 117,108,101,95,115,104,105,109,169,2,114,118,0,0,0,114, 139,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, - 24,3,0,0,115,2,0,0,0,0,2,122,25,95,76,111, + 25,3,0,0,115,2,0,0,0,0,2,122,25,95,76,111, 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, 109,111,100,117,108,101,78,41,8,114,125,0,0,0,114,124, 0,0,0,114,126,0,0,0,114,127,0,0,0,114,182,0, 0,0,114,212,0,0,0,114,217,0,0,0,114,220,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,208,0,0,0,0,3,0,0,115,10, + 114,8,0,0,0,114,208,0,0,0,1,3,0,0,115,10, 0,0,0,8,2,4,3,8,8,8,3,8,8,114,208,0, 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0, @@ -1179,7 +1179,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 10,32,32,32,32,32,32,32,32,78,41,1,114,50,0,0, 0,169,2,114,118,0,0,0,114,44,0,0,0,114,5,0, 0,0,114,5,0,0,0,114,8,0,0,0,218,10,112,97, - 116,104,95,109,116,105,109,101,31,3,0,0,115,2,0,0, + 116,104,95,109,116,105,109,101,32,3,0,0,115,2,0,0, 0,0,6,122,23,83,111,117,114,99,101,76,111,97,100,101, 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, @@ -1213,7 +1213,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 108,101,100,46,10,32,32,32,32,32,32,32,32,114,169,0, 0,0,41,1,114,223,0,0,0,114,222,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,112, - 97,116,104,95,115,116,97,116,115,39,3,0,0,115,2,0, + 97,116,104,95,115,116,97,116,115,40,3,0,0,115,2,0, 0,0,0,12,122,23,83,111,117,114,99,101,76,111,97,100, 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0, 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, @@ -1237,7 +1237,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,107,0,0,0,90,10,99,97,99,104,101,95,112, 97,116,104,114,26,0,0,0,114,5,0,0,0,114,5,0, 0,0,114,8,0,0,0,218,15,95,99,97,99,104,101,95, - 98,121,116,101,99,111,100,101,53,3,0,0,115,2,0,0, + 98,121,116,101,99,111,100,101,54,3,0,0,115,2,0,0, 0,0,8,122,28,83,111,117,114,99,101,76,111,97,100,101, 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100, 101,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, @@ -1254,7 +1254,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,5, 0,0,0,41,3,114,118,0,0,0,114,44,0,0,0,114, 26,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,225,0,0,0,63,3,0,0,115,2,0,0, + 0,0,0,114,225,0,0,0,64,3,0,0,115,2,0,0, 0,0,1,122,21,83,111,117,114,99,101,76,111,97,100,101, 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67, @@ -1275,7 +1275,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,41,5,114,118,0,0,0,114,139,0,0,0,114, 44,0,0,0,114,174,0,0,0,218,3,101,120,99,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,103, - 101,116,95,115,111,117,114,99,101,70,3,0,0,115,20,0, + 101,116,95,115,111,117,114,99,101,71,3,0,0,115,20,0, 0,0,0,2,10,1,2,1,14,1,14,1,4,1,2,255, 4,1,2,255,24,2,122,23,83,111,117,114,99,101,76,111, 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,114, @@ -1298,7 +1298,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,26,0,0,0,114,44,0,0,0,114,230,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, 218,14,115,111,117,114,99,101,95,116,111,95,99,111,100,101, - 80,3,0,0,115,6,0,0,0,0,5,12,1,4,255,122, + 81,3,0,0,115,6,0,0,0,0,5,12,1,4,255,122, 27,83,111,117,114,99,101,76,111,97,100,101,114,46,115,111, 117,114,99,101,95,116,111,95,99,111,100,101,99,2,0,0, 0,0,0,0,0,0,0,0,0,15,0,0,0,9,0,0, @@ -1374,7 +1374,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,116,114,26,0,0,0,114,151,0,0,0,114,2,0,0, 0,90,10,98,121,116,101,115,95,100,97,116,97,90,11,99, 111,100,101,95,111,98,106,101,99,116,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,213,0,0,0,88,3, + 5,0,0,0,114,8,0,0,0,114,213,0,0,0,89,3, 0,0,115,152,0,0,0,0,7,10,1,4,1,4,1,4, 1,4,1,4,1,2,1,12,1,12,1,12,2,2,1,14, 1,12,1,8,2,12,1,2,1,14,1,12,1,6,3,2, @@ -1391,7 +1391,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,226,0,0,0,114,225,0,0,0,114,229,0,0, 0,114,233,0,0,0,114,213,0,0,0,114,5,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 221,0,0,0,29,3,0,0,115,14,0,0,0,8,2,8, + 221,0,0,0,30,3,0,0,115,14,0,0,0,8,2,8, 8,8,14,8,10,8,7,8,10,14,8,114,221,0,0,0, 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,4,0,0,0,0,0,0,0,115,92,0,0,0,101,0, @@ -1418,7 +1418,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 32,32,32,32,32,32,32,102,105,110,100,101,114,46,78,114, 159,0,0,0,41,3,114,118,0,0,0,114,139,0,0,0, 114,44,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,114,209,0,0,0,178,3,0,0,115,4,0, + 8,0,0,0,114,209,0,0,0,179,3,0,0,115,4,0, 0,0,0,3,6,1,122,19,70,105,108,101,76,111,97,100, 101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, @@ -1427,7 +1427,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,109,0,0,0,169,2,218,9,95,95,99,108,97,115, 115,95,95,114,131,0,0,0,169,2,114,118,0,0,0,90, 5,111,116,104,101,114,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,218,6,95,95,101,113,95,95,184,3,0, + 114,8,0,0,0,218,6,95,95,101,113,95,95,185,3,0, 0,115,6,0,0,0,0,1,12,1,10,255,122,17,70,105, 108,101,76,111,97,100,101,114,46,95,95,101,113,95,95,99, 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, @@ -1436,7 +1436,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,109,0,0,0,169,3,218,4,104,97,115,104,114,116, 0,0,0,114,44,0,0,0,169,1,114,118,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,8, - 95,95,104,97,115,104,95,95,188,3,0,0,115,2,0,0, + 95,95,104,97,115,104,95,95,189,3,0,0,115,2,0,0, 0,0,1,122,19,70,105,108,101,76,111,97,100,101,114,46, 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0, @@ -1450,7 +1450,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,97,100,46,10,10,32,32,32,32,32,32,32,32,41,3, 218,5,115,117,112,101,114,114,239,0,0,0,114,220,0,0, 0,114,219,0,0,0,169,1,114,241,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,220,0,0,0,191,3,0,0, + 0,0,114,8,0,0,0,114,220,0,0,0,192,3,0,0, 115,2,0,0,0,0,10,122,22,70,105,108,101,76,111,97, 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, @@ -1460,7 +1460,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 117,114,99,101,32,102,105,108,101,32,97,115,32,102,111,117, 110,100,32,98,121,32,116,104,101,32,102,105,110,100,101,114, 46,114,48,0,0,0,114,219,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,114,179,0,0,0,203, + 114,5,0,0,0,114,8,0,0,0,114,179,0,0,0,204, 3,0,0,115,2,0,0,0,0,3,122,23,70,105,108,101, 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, 97,109,101,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -1482,7 +1482,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 84,0,0,0,90,4,114,101,97,100,114,65,0,0,0,41, 3,114,118,0,0,0,114,44,0,0,0,114,68,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 227,0,0,0,208,3,0,0,115,10,0,0,0,0,2,14, + 227,0,0,0,209,3,0,0,115,10,0,0,0,0,2,14, 1,16,1,40,2,14,1,122,19,70,105,108,101,76,111,97, 100,101,114,46,103,101,116,95,100,97,116,97,99,2,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0, @@ -1494,7 +1494,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,118,0,0,0,114,216,0,0,0,114,253,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,19, 103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97, - 100,101,114,217,3,0,0,115,4,0,0,0,0,2,12,1, + 100,101,114,218,3,0,0,115,4,0,0,0,0,2,12,1, 122,30,70,105,108,101,76,111,97,100,101,114,46,103,101,116, 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, 41,13,114,125,0,0,0,114,124,0,0,0,114,126,0,0, @@ -1503,7 +1503,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 179,0,0,0,114,227,0,0,0,114,254,0,0,0,90,13, 95,95,99,108,97,115,115,99,101,108,108,95,95,114,5,0, 0,0,114,5,0,0,0,114,249,0,0,0,114,8,0,0, - 0,114,239,0,0,0,173,3,0,0,115,22,0,0,0,8, + 0,114,239,0,0,0,174,3,0,0,115,22,0,0,0,8, 2,4,3,8,6,8,4,8,3,2,1,14,11,2,1,10, 4,8,9,2,1,114,239,0,0,0,99,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, @@ -1525,7 +1525,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 3,114,49,0,0,0,218,8,115,116,95,109,116,105,109,101, 90,7,115,116,95,115,105,122,101,41,3,114,118,0,0,0, 114,44,0,0,0,114,238,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,224,0,0,0,227,3, + 5,0,0,0,114,8,0,0,0,114,224,0,0,0,228,3, 0,0,115,4,0,0,0,0,2,8,1,122,27,83,111,117, 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, @@ -1536,7 +1536,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,225,0,0,0,41,5,114,118,0,0,0,114,107,0, 0,0,114,106,0,0,0,114,26,0,0,0,114,52,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 114,226,0,0,0,232,3,0,0,115,4,0,0,0,0,2, + 114,226,0,0,0,233,3,0,0,115,4,0,0,0,0,2, 8,1,122,32,83,111,117,114,99,101,70,105,108,101,76,111, 97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,101, 99,111,100,101,114,60,0,0,0,114,1,1,0,0,99,3, @@ -1571,7 +1571,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,218,6,112,97,114,101,110,116,114,96,0,0,0,114,37, 0,0,0,114,33,0,0,0,114,228,0,0,0,114,5,0, 0,0,114,5,0,0,0,114,8,0,0,0,114,225,0,0, - 0,237,3,0,0,115,46,0,0,0,0,2,12,1,4,2, + 0,238,3,0,0,115,46,0,0,0,0,2,12,1,4,2, 12,1,12,1,12,2,12,1,10,1,2,1,14,1,12,2, 8,1,14,3,6,1,4,255,4,2,26,1,2,1,12,1, 16,1,14,2,8,1,2,255,122,25,83,111,117,114,99,101, @@ -1580,7 +1580,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,126,0,0,0,114,127,0,0,0,114,224,0,0,0,114, 226,0,0,0,114,225,0,0,0,114,5,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,255,0, - 0,0,223,3,0,0,115,8,0,0,0,8,2,4,2,8, + 0,0,224,3,0,0,115,8,0,0,0,8,2,4,2,8, 5,8,5,114,255,0,0,0,99,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, @@ -1602,7 +1602,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,41,5,114,118,0,0,0,114,139,0,0,0,114, 44,0,0,0,114,26,0,0,0,114,151,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,213,0, - 0,0,16,4,0,0,115,22,0,0,0,0,1,10,1,10, + 0,0,17,4,0,0,115,22,0,0,0,0,1,10,1,10, 4,2,1,2,254,6,4,12,1,2,1,14,1,2,1,2, 253,122,29,83,111,117,114,99,101,108,101,115,115,70,105,108, 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, @@ -1612,14 +1612,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111, 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,5, 0,0,0,114,219,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,229,0,0,0,32,4,0,0, + 0,0,114,8,0,0,0,114,229,0,0,0,33,4,0,0, 115,2,0,0,0,0,2,122,31,83,111,117,114,99,101,108, 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, 116,95,115,111,117,114,99,101,78,41,6,114,125,0,0,0, 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, 213,0,0,0,114,229,0,0,0,114,5,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,5,1, - 0,0,12,4,0,0,115,6,0,0,0,8,2,4,2,8, + 0,0,13,4,0,0,115,6,0,0,0,8,2,4,2,8, 16,114,5,1,0,0,99,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, 92,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, @@ -1640,7 +1640,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,0,83,0,114,109,0,0,0,114,159,0,0,0,41,3, 114,118,0,0,0,114,116,0,0,0,114,44,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,209, - 0,0,0,49,4,0,0,115,4,0,0,0,0,1,6,1, + 0,0,0,50,4,0,0,115,4,0,0,0,0,1,6,1, 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,2, 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2, @@ -1648,7 +1648,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 124,1,106,0,107,2,111,22,124,0,106,1,124,1,106,1, 107,2,83,0,114,109,0,0,0,114,240,0,0,0,114,242, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,243,0,0,0,53,4,0,0,115,6,0,0,0, + 0,0,114,243,0,0,0,54,4,0,0,115,6,0,0,0, 0,1,12,1,10,255,122,26,69,120,116,101,110,115,105,111, 110,70,105,108,101,76,111,97,100,101,114,46,95,95,101,113, 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, @@ -1656,7 +1656,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, 65,0,83,0,114,109,0,0,0,114,244,0,0,0,114,246, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,247,0,0,0,57,4,0,0,115,2,0,0,0, + 0,0,114,247,0,0,0,58,4,0,0,115,2,0,0,0, 0,1,122,28,69,120,116,101,110,115,105,111,110,70,105,108, 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, @@ -1673,7 +1673,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,97,109,105,99,114,149,0,0,0,114,116,0,0,0,114, 44,0,0,0,41,3,114,118,0,0,0,114,187,0,0,0, 114,216,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,114,212,0,0,0,60,4,0,0,115,14,0, + 8,0,0,0,114,212,0,0,0,61,4,0,0,115,14,0, 0,0,0,2,4,1,6,255,4,2,6,1,8,255,4,2, 122,33,69,120,116,101,110,115,105,111,110,70,105,108,101,76, 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, @@ -1691,7 +1691,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,114,149,0,0,0,114,116,0,0,0,114,44,0,0,0, 169,2,114,118,0,0,0,114,216,0,0,0,114,5,0,0, 0,114,5,0,0,0,114,8,0,0,0,114,217,0,0,0, - 68,4,0,0,115,8,0,0,0,0,2,14,1,6,1,8, + 69,4,0,0,115,8,0,0,0,0,2,14,1,6,1,8, 255,122,31,69,120,116,101,110,115,105,111,110,70,105,108,101, 76,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117, 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, @@ -1709,7 +1709,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,169,2,114,32,0,0,0,218,6,115,117,102,102, 105,120,169,1,90,9,102,105,108,101,95,110,97,109,101,114, 5,0,0,0,114,8,0,0,0,218,9,60,103,101,110,101, - 120,112,114,62,77,4,0,0,115,4,0,0,0,4,1,2, + 120,112,114,62,78,4,0,0,115,4,0,0,0,4,1,2, 255,122,49,69,120,116,101,110,115,105,111,110,70,105,108,101, 76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103, 101,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, @@ -1717,7 +1717,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 218,3,97,110,121,218,18,69,88,84,69,78,83,73,79,78, 95,83,85,70,70,73,88,69,83,114,219,0,0,0,114,5, 0,0,0,114,9,1,0,0,114,8,0,0,0,114,182,0, - 0,0,74,4,0,0,115,8,0,0,0,0,2,14,1,12, + 0,0,75,4,0,0,115,8,0,0,0,0,2,14,1,12, 1,2,255,122,30,69,120,116,101,110,115,105,111,110,70,105, 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, 97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -1728,7 +1728,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,116,32,99,114,101,97,116,101,32,97,32,99,111,100,101, 32,111,98,106,101,99,116,46,78,114,5,0,0,0,114,219, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,114,213,0,0,0,80,4,0,0,115,2,0,0,0, + 0,0,114,213,0,0,0,81,4,0,0,115,2,0,0,0, 0,2,122,28,69,120,116,101,110,115,105,111,110,70,105,108, 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, @@ -1738,14 +1738,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,100,117,108,101,115,32,104,97,118,101,32,110,111,32,115, 111,117,114,99,101,32,99,111,100,101,46,78,114,5,0,0, 0,114,219,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,229,0,0,0,84,4,0,0,115,2, + 114,8,0,0,0,114,229,0,0,0,85,4,0,0,115,2, 0,0,0,0,2,122,30,69,120,116,101,110,115,105,111,110, 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115, 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,6, 0,0,0,124,0,106,0,83,0,114,250,0,0,0,114,48, 0,0,0,114,219,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,179,0,0,0,88,4,0,0, + 0,0,114,8,0,0,0,114,179,0,0,0,89,4,0,0, 115,2,0,0,0,0,3,122,32,69,120,116,101,110,115,105, 111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116, 95,102,105,108,101,110,97,109,101,78,41,14,114,125,0,0, @@ -1754,7 +1754,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 212,0,0,0,114,217,0,0,0,114,182,0,0,0,114,213, 0,0,0,114,229,0,0,0,114,136,0,0,0,114,179,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,114,252,0,0,0,41,4,0,0,115, + 0,114,8,0,0,0,114,252,0,0,0,42,4,0,0,115, 22,0,0,0,8,2,4,6,8,4,8,4,8,3,8,8, 8,6,8,6,8,4,8,4,2,1,114,252,0,0,0,99, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1797,7 +1797,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,169,4,114,118,0,0,0,114,116,0,0,0,114,44,0, 0,0,90,11,112,97,116,104,95,102,105,110,100,101,114,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,209, - 0,0,0,101,4,0,0,115,8,0,0,0,0,1,6,1, + 0,0,0,102,4,0,0,115,8,0,0,0,0,1,6,1, 6,1,14,1,122,23,95,78,97,109,101,115,112,97,99,101, 80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0, 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, @@ -1814,7 +1814,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 4,114,118,0,0,0,114,4,1,0,0,218,3,100,111,116, 90,2,109,101,114,5,0,0,0,114,5,0,0,0,114,8, 0,0,0,218,23,95,102,105,110,100,95,112,97,114,101,110, - 116,95,112,97,116,104,95,110,97,109,101,115,107,4,0,0, + 116,95,112,97,116,104,95,110,97,109,101,115,108,4,0,0, 115,8,0,0,0,0,2,18,1,8,2,4,3,122,38,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,102, 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, @@ -1827,7 +1827,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,118,0,0,0,90,18,112,97,114,101,110,116,95,109,111, 100,117,108,101,95,110,97,109,101,90,14,112,97,116,104,95, 97,116,116,114,95,110,97,109,101,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,16,1,0,0,117,4,0, + 0,0,0,114,8,0,0,0,114,16,1,0,0,118,4,0, 0,115,4,0,0,0,0,1,12,1,122,31,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,95,103,101,116,95, 112,97,114,101,110,116,95,112,97,116,104,99,1,0,0,0, @@ -1843,7 +1843,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,15,1,0,0,41,3,114,118,0,0,0,90, 11,112,97,114,101,110,116,95,112,97,116,104,114,187,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0, - 218,12,95,114,101,99,97,108,99,117,108,97,116,101,121,4, + 218,12,95,114,101,99,97,108,99,117,108,97,116,101,122,4, 0,0,115,16,0,0,0,0,2,12,1,10,1,14,3,18, 1,6,1,8,1,6,1,122,27,95,78,97,109,101,115,112, 97,99,101,80,97,116,104,46,95,114,101,99,97,108,99,117, @@ -1852,7 +1852,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,116,0,124,0,160,1,161,0,131,1,83,0,114,109, 0,0,0,41,2,218,4,105,116,101,114,114,23,1,0,0, 114,246,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,218,8,95,95,105,116,101,114,95,95,134,4, + 8,0,0,0,218,8,95,95,105,116,101,114,95,95,135,4, 0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101, 115,112,97,99,101,80,97,116,104,46,95,95,105,116,101,114, 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, @@ -1861,7 +1861,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,169,1,114,23,1,0,0,41,2,114,118,0,0,0,218, 5,105,110,100,101,120,114,5,0,0,0,114,5,0,0,0, 114,8,0,0,0,218,11,95,95,103,101,116,105,116,101,109, - 95,95,137,4,0,0,115,2,0,0,0,0,1,122,26,95, + 95,95,138,4,0,0,115,2,0,0,0,0,1,122,26,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, 103,101,116,105,116,101,109,95,95,99,3,0,0,0,0,0, 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, @@ -1869,7 +1869,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,100,0,83,0,114,109,0,0,0,41,1,114,15,1,0, 0,41,3,114,118,0,0,0,114,27,1,0,0,114,44,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0, - 0,218,11,95,95,115,101,116,105,116,101,109,95,95,140,4, + 0,218,11,95,95,115,101,116,105,116,101,109,95,95,141,4, 0,0,115,2,0,0,0,0,1,122,26,95,78,97,109,101, 115,112,97,99,101,80,97,116,104,46,95,95,115,101,116,105, 116,101,109,95,95,99,1,0,0,0,0,0,0,0,0,0, @@ -1877,7 +1877,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,116,0,124,0,160,1,161,0,131,1,83,0,114, 109,0,0,0,41,2,114,23,0,0,0,114,23,1,0,0, 114,246,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 8,0,0,0,218,7,95,95,108,101,110,95,95,143,4,0, + 8,0,0,0,218,7,95,95,108,101,110,95,95,144,4,0, 0,115,2,0,0,0,0,1,122,22,95,78,97,109,101,115, 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, @@ -1886,7 +1886,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, 114,125,41,41,2,114,62,0,0,0,114,15,1,0,0,114, 246,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,218,8,95,95,114,101,112,114,95,95,146,4,0, + 0,0,0,218,8,95,95,114,101,112,114,95,95,147,4,0, 0,115,2,0,0,0,0,1,122,23,95,78,97,109,101,115, 112,97,99,101,80,97,116,104,46,95,95,114,101,112,114,95, 95,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, @@ -1894,7 +1894,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,124,0,160,0,161,0,118,0,83,0,114,109,0,0,0, 114,26,1,0,0,169,2,114,118,0,0,0,218,4,105,116, 101,109,114,5,0,0,0,114,5,0,0,0,114,8,0,0, - 0,218,12,95,95,99,111,110,116,97,105,110,115,95,95,149, + 0,218,12,95,95,99,111,110,116,97,105,110,115,95,95,150, 4,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,95,95,99,111,110, 116,97,105,110,115,95,95,99,2,0,0,0,0,0,0,0, @@ -1902,7 +1902,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,16,0,0,0,124,0,106,0,160,1,124,1,161,1,1, 0,100,0,83,0,114,109,0,0,0,41,2,114,15,1,0, 0,114,186,0,0,0,114,32,1,0,0,114,5,0,0,0, - 114,5,0,0,0,114,8,0,0,0,114,186,0,0,0,152, + 114,5,0,0,0,114,8,0,0,0,114,186,0,0,0,153, 4,0,0,115,2,0,0,0,0,1,122,21,95,78,97,109, 101,115,112,97,99,101,80,97,116,104,46,97,112,112,101,110, 100,78,41,15,114,125,0,0,0,114,124,0,0,0,114,126, @@ -1911,7 +1911,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,28,1,0,0,114,29,1,0,0,114,30,1,0,0, 114,31,1,0,0,114,34,1,0,0,114,186,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, - 0,0,0,114,13,1,0,0,94,4,0,0,115,24,0,0, + 0,0,0,114,13,1,0,0,95,4,0,0,115,24,0,0, 0,8,1,4,6,8,6,8,10,8,4,8,13,8,3,8, 3,8,3,8,3,8,3,8,3,114,13,1,0,0,99,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, @@ -1927,7 +1927,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 124,1,124,2,124,3,131,3,124,0,95,1,100,0,83,0, 114,109,0,0,0,41,2,114,13,1,0,0,114,15,1,0, 0,114,19,1,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,209,0,0,0,158,4,0,0,115,2, + 114,8,0,0,0,114,209,0,0,0,159,4,0,0,115,2, 0,0,0,0,1,122,25,95,78,97,109,101,115,112,97,99, 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, @@ -1945,20 +1945,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,125,0,0,0,41,2,114,193,0,0,0,114, 216,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8, 0,0,0,218,11,109,111,100,117,108,101,95,114,101,112,114, - 161,4,0,0,115,2,0,0,0,0,7,122,28,95,78,97, + 162,4,0,0,115,2,0,0,0,0,7,122,28,95,78,97, 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, 100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0, 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, 0,0,115,4,0,0,0,100,1,83,0,41,2,78,84,114, 5,0,0,0,114,219,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,182,0,0,0,170,4,0, + 0,0,0,114,8,0,0,0,114,182,0,0,0,171,4,0, 0,115,2,0,0,0,0,1,122,27,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,105,115,95,112,97, 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, 0,0,0,100,1,83,0,41,2,78,114,40,0,0,0,114, 5,0,0,0,114,219,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,229,0,0,0,173,4,0, + 0,0,0,114,8,0,0,0,114,229,0,0,0,174,4,0, 0,115,2,0,0,0,0,1,122,27,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,115, 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, @@ -1968,20 +1968,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,105,110,103,62,114,215,0,0,0,84,41,1,114,231,0, 0,0,41,1,114,232,0,0,0,114,219,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,213,0, - 0,0,176,4,0,0,115,2,0,0,0,0,1,122,25,95, + 0,0,177,4,0,0,115,2,0,0,0,0,1,122,25,95, 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, 0,115,4,0,0,0,100,1,83,0,114,210,0,0,0,114, 5,0,0,0,114,211,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,212,0,0,0,179,4,0, + 0,0,0,114,8,0,0,0,114,212,0,0,0,180,4,0, 0,115,2,0,0,0,0,1,122,30,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116, 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, 0,115,4,0,0,0,100,0,83,0,114,109,0,0,0,114, 5,0,0,0,114,6,1,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,217,0,0,0,182,4,0, + 0,0,0,114,8,0,0,0,114,217,0,0,0,183,4,0, 0,115,2,0,0,0,0,1,122,28,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,101,120,101,99,95, 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, @@ -1999,7 +1999,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,104,32,112,97,116,104,32,123,33,114,125,41,4,114,134, 0,0,0,114,149,0,0,0,114,15,1,0,0,114,218,0, 0,0,114,219,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,8,0,0,0,114,220,0,0,0,185,4,0,0,115, + 0,114,8,0,0,0,114,220,0,0,0,186,4,0,0,115, 8,0,0,0,0,7,6,1,4,255,4,2,122,28,95,78, 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,108, 111,97,100,95,109,111,100,117,108,101,78,41,12,114,125,0, @@ -2008,7 +2008,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,229,0,0,0,114,213,0,0,0,114,212,0,0,0,114, 217,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,35,1, - 0,0,157,4,0,0,115,18,0,0,0,8,1,8,3,2, + 0,0,158,4,0,0,115,18,0,0,0,8,1,8,3,2, 1,10,8,8,3,8,3,8,3,8,3,8,3,114,35,1, 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,4,0,0,0,64,0,0,0,115,118,0,0,0, @@ -2045,7 +2045,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,128,0,0,0,114,38,1,0,0,41,3,114,193,0,0, 0,114,116,0,0,0,218,6,102,105,110,100,101,114,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,38,1, - 0,0,203,4,0,0,115,10,0,0,0,0,4,22,1,8, + 0,0,204,4,0,0,115,10,0,0,0,0,4,22,1,8, 1,10,1,10,1,122,28,80,97,116,104,70,105,110,100,101, 114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99, 104,101,115,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -2065,7 +2065,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 117,0,0,0,41,3,114,193,0,0,0,114,44,0,0,0, 90,4,104,111,111,107,114,5,0,0,0,114,5,0,0,0, 114,8,0,0,0,218,11,95,112,97,116,104,95,104,111,111, - 107,115,213,4,0,0,115,16,0,0,0,0,3,16,1,12, + 107,115,214,4,0,0,115,16,0,0,0,0,3,16,1,12, 1,10,1,2,1,14,1,12,1,10,2,122,22,80,97,116, 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, 111,107,115,99,2,0,0,0,0,0,0,0,0,0,0,0, @@ -2096,7 +2096,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,114,111,114,114,44,1,0,0,41,3,114,193,0,0,0, 114,44,0,0,0,114,42,1,0,0,114,5,0,0,0,114, 5,0,0,0,114,8,0,0,0,218,20,95,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,226, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,227, 4,0,0,115,22,0,0,0,0,8,8,1,2,1,12,1, 12,3,8,1,2,1,14,1,12,1,10,1,16,1,122,31, 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, @@ -2114,7 +2114,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,139,0,0,0,114,42,1,0,0,114,140,0, 0,0,114,141,0,0,0,114,187,0,0,0,114,5,0,0, 0,114,5,0,0,0,114,8,0,0,0,218,16,95,108,101, - 103,97,99,121,95,103,101,116,95,115,112,101,99,248,4,0, + 103,97,99,121,95,103,101,116,95,115,112,101,99,249,4,0, 0,115,18,0,0,0,0,4,10,1,16,2,10,1,4,1, 8,1,12,1,12,1,6,1,122,27,80,97,116,104,70,105, 110,100,101,114,46,95,108,101,103,97,99,121,95,103,101,116, @@ -2146,7 +2146,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,116,104,90,5,101,110,116,114,121,114,42,1,0,0,114, 187,0,0,0,114,141,0,0,0,114,5,0,0,0,114,5, 0,0,0,114,8,0,0,0,218,9,95,103,101,116,95,115, - 112,101,99,7,5,0,0,115,40,0,0,0,0,5,4,1, + 112,101,99,8,5,0,0,115,40,0,0,0,0,5,4,1, 8,1,14,1,2,1,10,1,8,1,10,1,14,2,12,1, 8,1,2,1,10,1,8,1,6,1,8,1,8,5,12,2, 12,1,6,1,122,20,80,97,116,104,70,105,110,100,101,114, @@ -2173,7 +2173,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 193,0,0,0,114,139,0,0,0,114,44,0,0,0,114,202, 0,0,0,114,187,0,0,0,114,50,1,0,0,114,5,0, 0,0,114,5,0,0,0,114,8,0,0,0,114,203,0,0, - 0,39,5,0,0,115,26,0,0,0,0,6,8,1,6,1, + 0,40,5,0,0,115,26,0,0,0,0,6,8,1,6,1, 14,1,8,1,4,1,10,1,6,1,4,3,6,1,16,1, 4,2,4,2,122,20,80,97,116,104,70,105,110,100,101,114, 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, @@ -2193,7 +2193,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, 32,32,32,32,78,114,204,0,0,0,114,205,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,206, - 0,0,0,63,5,0,0,115,8,0,0,0,0,8,12,1, + 0,0,0,64,5,0,0,115,8,0,0,0,0,8,12,1, 8,1,4,1,122,22,80,97,116,104,70,105,110,100,101,114, 46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0, 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, @@ -2225,7 +2225,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 98,117,116,105,111,110,115,41,4,114,193,0,0,0,114,119, 0,0,0,114,120,0,0,0,114,52,1,0,0,114,5,0, 0,0,114,5,0,0,0,114,8,0,0,0,114,53,1,0, - 0,76,5,0,0,115,4,0,0,0,0,10,12,1,122,29, + 0,77,5,0,0,115,4,0,0,0,0,10,12,1,122,29, 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, 100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78, 41,2,78,78,41,1,78,41,13,114,125,0,0,0,114,124, @@ -2234,7 +2234,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,48,1,0,0,114,51,1,0,0,114,203,0,0,0, 114,206,0,0,0,114,53,1,0,0,114,5,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,37, - 1,0,0,199,4,0,0,115,34,0,0,0,8,2,4,2, + 1,0,0,200,4,0,0,115,34,0,0,0,8,2,4,2, 2,1,10,9,2,1,10,12,2,1,10,21,2,1,10,14, 2,1,12,31,2,1,12,23,2,1,12,12,2,1,114,37, 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, @@ -2279,7 +2279,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 2,86,0,1,0,113,2,100,0,83,0,114,109,0,0,0, 114,5,0,0,0,114,7,1,0,0,169,1,114,140,0,0, 0,114,5,0,0,0,114,8,0,0,0,114,10,1,0,0, - 105,5,0,0,243,0,0,0,0,122,38,70,105,108,101,70, + 106,5,0,0,243,0,0,0,0,122,38,70,105,108,101,70, 105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60, 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, 62,114,71,0,0,0,114,104,0,0,0,78,41,7,114,167, @@ -2291,7 +2291,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, 108,115,90,7,108,111,97,100,101,114,115,114,189,0,0,0, 114,5,0,0,0,114,55,1,0,0,114,8,0,0,0,114, - 209,0,0,0,99,5,0,0,115,16,0,0,0,0,4,4, + 209,0,0,0,100,5,0,0,115,16,0,0,0,0,4,4, 1,12,1,26,1,6,2,10,1,6,1,8,1,122,19,70, 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, @@ -2301,7 +2301,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,99,116,111,114,121,32,109,116,105,109,101,46,114,104,0, 0,0,78,41,1,114,58,1,0,0,114,246,0,0,0,114, 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,38, - 1,0,0,113,5,0,0,115,2,0,0,0,0,2,122,28, + 1,0,0,114,5,0,0,115,2,0,0,0,0,2,122,28, 70,105,108,101,70,105,110,100,101,114,46,105,110,118,97,108, 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, @@ -2324,7 +2324,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,203,0,0,0,114,140,0,0,0,114,178,0,0,0,41, 3,114,118,0,0,0,114,139,0,0,0,114,187,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114, - 137,0,0,0,119,5,0,0,115,8,0,0,0,0,7,10, + 137,0,0,0,120,5,0,0,115,8,0,0,0,0,7,10, 1,8,1,8,1,122,22,70,105,108,101,70,105,110,100,101, 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, 0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0, @@ -2334,7 +2334,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 190,0,0,0,41,7,114,118,0,0,0,114,188,0,0,0, 114,139,0,0,0,114,44,0,0,0,90,4,115,109,115,108, 114,202,0,0,0,114,140,0,0,0,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,51,1,0,0,131,5, + 5,0,0,0,114,8,0,0,0,114,51,1,0,0,132,5, 0,0,115,8,0,0,0,0,1,10,1,8,1,2,255,122, 20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116, 95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,0, @@ -2389,7 +2389,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 13,105,110,105,116,95,102,105,108,101,110,97,109,101,90,9, 102,117,108,108,95,112,97,116,104,114,187,0,0,0,114,5, 0,0,0,114,5,0,0,0,114,8,0,0,0,114,203,0, - 0,0,136,5,0,0,115,72,0,0,0,0,5,4,1,14, + 0,0,137,5,0,0,115,72,0,0,0,0,5,4,1,14, 1,2,1,24,1,12,1,10,1,10,1,8,1,6,2,6, 1,6,1,10,2,6,1,4,2,8,1,12,1,14,1,8, 1,10,1,8,1,24,4,8,2,14,1,16,1,16,1,12, @@ -2420,7 +2420,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 124,1,160,0,161,0,146,2,113,4,83,0,114,5,0,0, 0,41,1,114,105,0,0,0,41,2,114,32,0,0,0,90, 2,102,110,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,9,60,115,101,116,99,111,109,112,62,213,5,0, + 0,0,218,9,60,115,101,116,99,111,109,112,62,214,5,0, 0,114,56,1,0,0,122,41,70,105,108,101,70,105,110,100, 101,114,46,95,102,105,108,108,95,99,97,99,104,101,46,60, 108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,112, @@ -2437,7 +2437,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 120,95,99,111,110,116,101,110,116,115,114,33,1,0,0,114, 116,0,0,0,114,20,1,0,0,114,8,1,0,0,90,8, 110,101,119,95,110,97,109,101,114,5,0,0,0,114,5,0, - 0,0,114,8,0,0,0,114,63,1,0,0,184,5,0,0, + 0,0,114,8,0,0,0,114,63,1,0,0,185,5,0,0, 115,34,0,0,0,0,2,6,1,2,1,22,1,18,3,10, 3,12,1,12,7,6,1,8,1,16,1,4,1,18,2,4, 1,12,1,6,1,12,1,122,22,70,105,108,101,70,105,110, @@ -2476,14 +2476,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,169,2,114,193,0,0,0,114,62,1,0,0,114, 5,0,0,0,114,8,0,0,0,218,24,112,97,116,104,95, 104,111,111,107,95,102,111,114,95,70,105,108,101,70,105,110, - 100,101,114,225,5,0,0,115,6,0,0,0,0,2,8,1, + 100,101,114,226,5,0,0,115,6,0,0,0,0,2,8,1, 12,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112, 97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115, 62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95, 70,105,108,101,70,105,110,100,101,114,114,5,0,0,0,41, 3,114,193,0,0,0,114,62,1,0,0,114,69,1,0,0, 114,5,0,0,0,114,68,1,0,0,114,8,0,0,0,218, - 9,112,97,116,104,95,104,111,111,107,215,5,0,0,115,4, + 9,112,97,116,104,95,104,111,111,107,216,5,0,0,115,4, 0,0,0,0,10,14,6,122,20,70,105,108,101,70,105,110, 100,101,114,46,112,97,116,104,95,104,111,111,107,99,1,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, @@ -2492,7 +2492,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 70,105,110,100,101,114,40,123,33,114,125,41,41,2,114,62, 0,0,0,114,44,0,0,0,114,246,0,0,0,114,5,0, 0,0,114,5,0,0,0,114,8,0,0,0,114,31,1,0, - 0,233,5,0,0,115,2,0,0,0,0,1,122,19,70,105, + 0,234,5,0,0,115,2,0,0,0,0,1,122,19,70,105, 108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,95, 95,41,1,78,41,15,114,125,0,0,0,114,124,0,0,0, 114,126,0,0,0,114,127,0,0,0,114,209,0,0,0,114, @@ -2500,7 +2500,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,51,1,0,0,114,203,0,0,0,114,63,1, 0,0,114,207,0,0,0,114,70,1,0,0,114,31,1,0, 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,8,0,0,0,114,54,1,0,0,90,5,0,0,115,22, + 114,8,0,0,0,114,54,1,0,0,91,5,0,0,115,22, 0,0,0,8,2,4,7,8,14,8,4,4,2,8,12,8, 5,10,48,8,31,2,1,10,17,114,54,1,0,0,99,4, 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,8, @@ -2523,7 +2523,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,90,8,112,97,116,104,110,97,109,101,90,9,99,112,97, 116,104,110,97,109,101,114,140,0,0,0,114,187,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,239, + 14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,240, 5,0,0,115,34,0,0,0,0,2,10,1,10,1,4,1, 4,1,8,1,8,1,12,2,10,1,4,1,14,1,2,1, 8,1,8,1,8,1,12,1,12,2,114,75,1,0,0,99, @@ -2543,7 +2543,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,5,1,0,0,114,88,0,0,0,41,3,90,10,101,120, 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, 90,8,98,121,116,101,99,111,100,101,114,5,0,0,0,114, - 5,0,0,0,114,8,0,0,0,114,184,0,0,0,6,6, + 5,0,0,0,114,8,0,0,0,114,184,0,0,0,7,6, 0,0,115,8,0,0,0,0,5,12,1,8,1,8,1,114, 184,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, 0,10,0,0,0,9,0,0,0,67,0,0,0,115,130,1, @@ -2591,7 +2591,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,0,107,2,86,0,1,0,113,2,100,1,83,0,41,2, 114,39,0,0,0,78,41,1,114,23,0,0,0,41,2,114, 32,0,0,0,114,94,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,10,1,0,0,35,6,0, + 0,0,0,114,8,0,0,0,114,10,1,0,0,36,6,0, 0,114,56,1,0,0,122,25,95,115,101,116,117,112,46,60, 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, 62,114,73,0,0,0,122,30,105,109,112,111,114,116,108,105, @@ -2603,7 +2603,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113, 4,83,0,41,1,114,74,0,0,0,114,5,0,0,0,41, 2,114,32,0,0,0,218,1,115,114,5,0,0,0,114,5, - 0,0,0,114,8,0,0,0,114,64,1,0,0,52,6,0, + 0,0,0,114,8,0,0,0,114,64,1,0,0,53,6,0, 0,114,56,1,0,0,122,25,95,115,101,116,117,112,46,60, 108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,112, 62,41,3,114,64,0,0,0,114,75,0,0,0,114,160,0, @@ -2624,7 +2624,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,97,109,101,115,90,12,98,117,105,108,116,105,110,95,110, 97,109,101,90,14,98,117,105,108,116,105,110,95,109,111,100, 117,108,101,114,5,0,0,0,114,5,0,0,0,114,8,0, - 0,0,218,6,95,115,101,116,117,112,17,6,0,0,115,70, + 0,0,218,6,95,115,101,116,117,112,18,6,0,0,115,70, 0,0,0,0,8,4,1,6,1,6,2,10,3,22,1,12, 2,22,1,8,1,10,1,10,1,6,2,2,1,10,1,10, 1,12,1,10,2,8,2,12,1,12,1,18,1,22,3,8, @@ -2644,7 +2644,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,37,1,0,0,41,2,114,81,1,0,0,90,17,115, 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218, - 8,95,105,110,115,116,97,108,108,74,6,0,0,115,8,0, + 8,95,105,110,115,116,97,108,108,75,6,0,0,115,8,0, 0,0,0,2,8,1,6,1,20,1,114,84,1,0,0,41, 1,114,60,0,0,0,41,1,78,41,3,78,78,78,41,2, 114,73,0,0,0,114,73,0,0,0,41,1,84,41,1,78, @@ -2678,7 +2678,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,117,108,101,62,1,0,0,0,115,126,0,0,0,4,22, 4,1,4,1,2,1,2,255,4,4,8,17,8,5,8,5, 8,6,8,6,8,12,8,10,8,9,8,5,8,7,8,9, - 10,22,10,127,0,20,16,1,12,2,4,1,4,2,6,2, + 10,22,10,127,0,21,16,1,12,2,4,1,4,2,6,2, 6,2,8,2,16,71,8,40,8,19,8,12,8,12,8,28, 8,17,8,33,8,28,8,24,10,13,10,10,10,11,8,14, 6,3,4,1,2,255,12,68,14,64,14,29,16,127,0,17, diff --git a/Python/pystate.c b/Python/pystate.c index f6d1956e9d..eb24f2b800 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -581,7 +581,6 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->frame = NULL; tstate->recursion_depth = 0; tstate->overflowed = 0; - tstate->recursion_critical = 0; tstate->stackcheck_counter = 0; tstate->tracing = 0; tstate->use_tracing = 0; diff --git a/Python/pythonrun.c b/Python/pythonrun.c index ff80103050..a45ca3b183 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -770,7 +770,7 @@ static void print_exception(PyObject *f, PyObject *value) { int err = 0; - PyObject *type, *tb; + PyObject *type, *tb, *tmp; _Py_IDENTIFIER(print_file_and_line); if (!PyExceptionInstance_Check(value)) { @@ -789,10 +789,12 @@ print_exception(PyObject *f, PyObject *value) if (tb && tb != Py_None) err = PyTraceBack_Print(tb, f); if (err == 0 && - _PyObject_HasAttrId(value, &PyId_print_file_and_line)) + (err = _PyObject_LookupAttrId(value, &PyId_print_file_and_line, &tmp)) > 0) { PyObject *message, *filename, *text; Py_ssize_t lineno, offset; + err = 0; + Py_DECREF(tmp); if (!parse_syntax_error(value, &message, &filename, &lineno, &offset, &text)) PyErr_Clear(); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 9fcdb5dbc4..bfcf4e8514 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2649,18 +2649,7 @@ static struct PyModuleDef sysmodule = { }; /* Updating the sys namespace, returning NULL pointer on error */ -#define SET_SYS_FROM_STRING_BORROW(key, value) \ - do { \ - PyObject *v = (value); \ - if (v == NULL) { \ - goto err_occurred; \ - } \ - res = PyDict_SetItemString(sysdict, key, v); \ - if (res < 0) { \ - goto err_occurred; \ - } \ - } while (0) -#define SET_SYS_FROM_STRING(key, value) \ +#define SET_SYS(key, value) \ do { \ PyObject *v = (value); \ if (v == NULL) { \ @@ -2673,6 +2662,9 @@ static struct PyModuleDef sysmodule = { } \ } while (0) +#define SET_SYS_FROM_STRING(key, value) \ + SET_SYS(key, PyUnicode_FromString(value)) + static PyStatus _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) { @@ -2681,65 +2673,48 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) /* stdin/stdout/stderr are set in pylifecycle.c */ - SET_SYS_FROM_STRING_BORROW("__displayhook__", - PyDict_GetItemString(sysdict, "displayhook")); - SET_SYS_FROM_STRING_BORROW("__excepthook__", - PyDict_GetItemString(sysdict, "excepthook")); - SET_SYS_FROM_STRING_BORROW( - "__breakpointhook__", - PyDict_GetItemString(sysdict, "breakpointhook")); - SET_SYS_FROM_STRING_BORROW("__unraisablehook__", - PyDict_GetItemString(sysdict, "unraisablehook")); - - SET_SYS_FROM_STRING("version", - PyUnicode_FromString(Py_GetVersion())); - SET_SYS_FROM_STRING("hexversion", - PyLong_FromLong(PY_VERSION_HEX)); - SET_SYS_FROM_STRING("_git", - Py_BuildValue("(szz)", "CPython", _Py_gitidentifier(), - _Py_gitversion())); - SET_SYS_FROM_STRING("_framework", PyUnicode_FromString(_PYTHONFRAMEWORK)); - SET_SYS_FROM_STRING("api_version", - PyLong_FromLong(PYTHON_API_VERSION)); - SET_SYS_FROM_STRING("copyright", - PyUnicode_FromString(Py_GetCopyright())); - SET_SYS_FROM_STRING("platform", - PyUnicode_FromString(Py_GetPlatform())); - SET_SYS_FROM_STRING("maxsize", - PyLong_FromSsize_t(PY_SSIZE_T_MAX)); - SET_SYS_FROM_STRING("float_info", - PyFloat_GetInfo()); - SET_SYS_FROM_STRING("int_info", - PyLong_GetInfo()); +#define COPY_SYS_ATTR(tokey, fromkey) \ + SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey)) + + COPY_SYS_ATTR("__displayhook__", "displayhook"); + COPY_SYS_ATTR("__excepthook__", "excepthook"); + COPY_SYS_ATTR("__breakpointhook__", "breakpointhook"); + COPY_SYS_ATTR("__unraisablehook__", "unraisablehook"); + +#undef COPY_SYS_ATTR + + SET_SYS_FROM_STRING("version", Py_GetVersion()); + SET_SYS("hexversion", PyLong_FromLong(PY_VERSION_HEX)); + SET_SYS("_git", Py_BuildValue("(szz)", "CPython", _Py_gitidentifier(), + _Py_gitversion())); + SET_SYS_FROM_STRING("_framework", _PYTHONFRAMEWORK); + SET_SYS("api_version", PyLong_FromLong(PYTHON_API_VERSION)); + SET_SYS_FROM_STRING("copyright", Py_GetCopyright()); + SET_SYS_FROM_STRING("platform", Py_GetPlatform()); + SET_SYS("maxsize", PyLong_FromSsize_t(PY_SSIZE_T_MAX)); + SET_SYS("float_info", PyFloat_GetInfo()); + SET_SYS("int_info", PyLong_GetInfo()); /* initialize hash_info */ if (Hash_InfoType.tp_name == NULL) { if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) { goto type_init_failed; } } - SET_SYS_FROM_STRING("hash_info", - get_hash_info(tstate)); - SET_SYS_FROM_STRING("maxunicode", - PyLong_FromLong(0x10FFFF)); - SET_SYS_FROM_STRING("builtin_module_names", - list_builtin_module_names()); + SET_SYS("hash_info", get_hash_info(tstate)); + SET_SYS("maxunicode", PyLong_FromLong(0x10FFFF)); + SET_SYS("builtin_module_names", list_builtin_module_names()); #if PY_BIG_ENDIAN - SET_SYS_FROM_STRING("byteorder", - PyUnicode_FromString("big")); + SET_SYS_FROM_STRING("byteorder", "big"); #else - SET_SYS_FROM_STRING("byteorder", - PyUnicode_FromString("little")); + SET_SYS_FROM_STRING("byteorder", "little"); #endif #ifdef MS_COREDLL - SET_SYS_FROM_STRING("dllhandle", - PyLong_FromVoidPtr(PyWin_DLLhModule)); - SET_SYS_FROM_STRING("winver", - PyUnicode_FromString(PyWin_DLLVersionString)); + SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); #endif #ifdef ABIFLAGS - SET_SYS_FROM_STRING("abiflags", - PyUnicode_FromString(ABIFLAGS)); + SET_SYS_FROM_STRING("abiflags", ABIFLAGS); #endif /* version_info */ @@ -2750,7 +2725,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) } } version_info = make_version_info(tstate); - SET_SYS_FROM_STRING("version_info", version_info); + SET_SYS("version_info", version_info); /* prevent user from creating new instances */ VersionInfoType.tp_init = NULL; VersionInfoType.tp_new = NULL; @@ -2760,7 +2735,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) } /* implementation */ - SET_SYS_FROM_STRING("implementation", make_impl_info(version_info)); + SET_SYS("implementation", make_impl_info(version_info)); /* flags */ if (FlagsType.tp_name == 0) { @@ -2769,7 +2744,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) } } /* Set flags to their default values (updated by _PySys_InitMain()) */ - SET_SYS_FROM_STRING("flags", make_flags(tstate)); + SET_SYS("flags", make_flags(tstate)); #if defined(MS_WINDOWS) /* getwindowsversion */ @@ -2790,14 +2765,12 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) /* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */ #ifndef PY_NO_SHORT_FLOAT_REPR - SET_SYS_FROM_STRING("float_repr_style", - PyUnicode_FromString("short")); + SET_SYS_FROM_STRING("float_repr_style", "short"); #else - SET_SYS_FROM_STRING("float_repr_style", - PyUnicode_FromString("legacy")); + SET_SYS_FROM_STRING("float_repr_style", "legacy"); #endif - SET_SYS_FROM_STRING("thread_info", PyThread_GetInfo()); + SET_SYS("thread_info", PyThread_GetInfo()); /* initialize asyncgen_hooks */ if (AsyncGenHooksType.tp_name == NULL) { @@ -2819,20 +2792,6 @@ err_occurred: return _PyStatus_ERR("can't initialize sys module"); } -/* Updating the sys namespace, returning integer error codes */ -#define SET_SYS_FROM_STRING_INT_RESULT(key, value) \ - do { \ - PyObject *v = (value); \ - if (v == NULL) \ - return -1; \ - res = PyDict_SetItemString(sysdict, key, v); \ - Py_DECREF(v); \ - if (res < 0) { \ - return res; \ - } \ - } while (0) - - static int sys_add_xoption(PyObject *opts, const wchar_t *s) { @@ -2895,24 +2854,10 @@ _PySys_InitMain(PyThreadState *tstate) int res; #define COPY_LIST(KEY, VALUE) \ - do { \ - PyObject *list = _PyWideStringList_AsList(&(VALUE)); \ - if (list == NULL) { \ - return -1; \ - } \ - SET_SYS_FROM_STRING_BORROW(KEY, list); \ - Py_DECREF(list); \ - } while (0) + SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE))); #define SET_SYS_FROM_WSTR(KEY, VALUE) \ - do { \ - PyObject *str = PyUnicode_FromWideChar(VALUE, -1); \ - if (str == NULL) { \ - return -1; \ - } \ - SET_SYS_FROM_STRING_BORROW(KEY, str); \ - Py_DECREF(str); \ - } while (0) + SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1)); COPY_LIST("path", config->module_search_paths); @@ -2934,19 +2879,14 @@ _PySys_InitMain(PyThreadState *tstate) COPY_LIST("orig_argv", config->orig_argv); COPY_LIST("warnoptions", config->warnoptions); - PyObject *xoptions = sys_create_xoptions_dict(config); - if (xoptions == NULL) { - return -1; - } - SET_SYS_FROM_STRING_BORROW("_xoptions", xoptions); - Py_DECREF(xoptions); + SET_SYS("_xoptions", sys_create_xoptions_dict(config)); #undef COPY_LIST #undef SET_SYS_FROM_WSTR /* Set flags to their final values */ - SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(tstate)); + SET_SYS("flags", make_flags(tstate)); /* prevent user from creating new instances */ FlagsType.tp_init = NULL; FlagsType.tp_new = NULL; @@ -2958,8 +2898,7 @@ _PySys_InitMain(PyThreadState *tstate) _PyErr_Clear(tstate); } - SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode", - PyBool_FromLong(!config->write_bytecode)); + SET_SYS("dont_write_bytecode", PyBool_FromLong(!config->write_bytecode)); if (get_warnoptions(tstate) == NULL) { return -1; @@ -2978,9 +2917,8 @@ err_occurred: return -1; } +#undef SET_SYS #undef SET_SYS_FROM_STRING -#undef SET_SYS_FROM_STRING_BORROW -#undef SET_SYS_FROM_STRING_INT_RESULT /* Set up a preliminary stderr printer until we have enough |