summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2020-10-19 15:50:36 +0100
committerGitHub <noreply@github.com>2020-10-19 15:50:36 +0100
commitc82f10450c547eb94a04ee17b7c816ff31948297 (patch)
treead305c05c5745e1a5e7c136545bec7eefa741e32 /Python
parenteee6bb50c69d94280f43b47390ea9d1b5f42930c (diff)
parentb580ed1d9d55461d8dde027411b90be26cae131e (diff)
downloadcpython-git-bpo-39107.tar.gz
Merge branch 'master' into bpo-39107bpo-39107
Diffstat (limited to 'Python')
-rw-r--r--Python/ast.c14
-rw-r--r--Python/ast_opt.c24
-rw-r--r--Python/ceval.c28
-rw-r--r--Python/codecs.c50
-rw-r--r--Python/compile.c33
-rw-r--r--Python/dynload_aix.c184
-rw-r--r--Python/dynload_dl.c23
-rw-r--r--Python/dynload_hpux.c15
-rw-r--r--Python/dynload_shlib.c4
-rw-r--r--Python/errors.c19
-rw-r--r--Python/fileutils.c76
-rw-r--r--Python/future.c2
-rw-r--r--Python/import.c23
-rw-r--r--Python/importlib_external.h222
-rw-r--r--Python/pystate.c1
-rw-r--r--Python/pythonrun.c6
-rw-r--r--Python/sysmodule.c152
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