summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Python/modsupport.c
diff options
context:
space:
mode:
authorAlexSm <[email protected]>2024-02-16 11:51:30 +0100
committerGitHub <[email protected]>2024-02-16 11:51:30 +0100
commit506ecaee93b52cc12c2e2f97c3d42e3ca2a7f59e (patch)
treed096fb9eb988fbb0ca1ba970041773207ce3aa70 /contrib/tools/python3/src/Python/modsupport.c
parent4749b9e5d260714490997e6f5ee1ee8c1c8fc46c (diff)
parentf200f72c9d7a89c1018e3dc6b46c49fe2ecf84fb (diff)
Merge pull request #1940 from dcherednik/importlib
Library import 14
Diffstat (limited to 'contrib/tools/python3/src/Python/modsupport.c')
-rw-r--r--contrib/tools/python3/src/Python/modsupport.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/contrib/tools/python3/src/Python/modsupport.c b/contrib/tools/python3/src/Python/modsupport.c
index 89ffae8c0f1..df4ae35a525 100644
--- a/contrib/tools/python3/src/Python/modsupport.c
+++ b/contrib/tools/python3/src/Python/modsupport.c
@@ -3,6 +3,7 @@
#include "Python.h"
#include "pycore_abstract.h" // _PyIndex_Check()
+#include "pycore_object.h" // _PyType_IsReady()
#define FLAG_SIZE_T 1
typedef double va_double;
@@ -10,9 +11,6 @@ typedef double va_double;
static PyObject *va_build_value(const char *, va_list, int);
static PyObject **va_build_stack(PyObject **small_stack, Py_ssize_t small_stack_len, const char *, va_list, int, Py_ssize_t*);
-/* Package context -- the full module name for package imports */
-const char *_Py_PackageContext = NULL;
-
int
_Py_convert_optional_to_ssize_t(PyObject *obj, void *result)
@@ -96,16 +94,12 @@ static PyObject *do_mkvalue(const char**, va_list *, int);
static void
do_ignore(const char **p_format, va_list *p_va, char endchar, Py_ssize_t n, int flags)
{
- PyObject *v;
- Py_ssize_t i;
assert(PyErr_Occurred());
- v = PyTuple_New(n);
- for (i = 0; i < n; i++) {
- PyObject *exception, *value, *tb, *w;
-
- PyErr_Fetch(&exception, &value, &tb);
- w = do_mkvalue(p_format, p_va, flags);
- PyErr_Restore(exception, value, tb);
+ PyObject *v = PyTuple_New(n);
+ for (Py_ssize_t i = 0; i < n; i++) {
+ PyObject *exc = PyErr_GetRaisedException();
+ PyObject *w = do_mkvalue(p_format, p_va, flags);
+ PyErr_SetRaisedException(exc);
if (w != NULL) {
if (v != NULL) {
PyTuple_SET_ITEM(v, i, w);
@@ -359,8 +353,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags)
else
n = -1;
if (u == NULL) {
- v = Py_None;
- Py_INCREF(v);
+ v = Py_NewRef(Py_None);
}
else {
if (n < 0)
@@ -410,8 +403,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags)
else
n = -1;
if (str == NULL) {
- v = Py_None;
- Py_INCREF(v);
+ v = Py_NewRef(Py_None);
}
else {
if (n < 0) {
@@ -446,8 +438,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags)
else
n = -1;
if (str == NULL) {
- v = Py_None;
- Py_INCREF(v);
+ v = Py_NewRef(Py_None);
}
else {
if (n < 0) {
@@ -694,7 +685,7 @@ PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
int
PyModule_AddType(PyObject *module, PyTypeObject *type)
{
- if (PyType_Ready(type) < 0) {
+ if (!_PyType_IsReady(type) && PyType_Ready(type) < 0) {
return -1;
}