summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorLarry Hastings <larry@hastings.org>2016-06-13 03:26:28 (GMT)
committerLarry Hastings <larry@hastings.org>2016-06-13 03:26:28 (GMT)
commit29f963732166260420ffbdebe9eb8b98a009dc8c (patch)
tree17ad6530ee3b66b53647ab70bac08145dcd69783 /Modules
parent6e9a96be9e24265638df8aa600e566b306a23a2b (diff)
parent1003b34c71d53ccb88ae2768aaba503ae6b5bc16 (diff)
downloadcpython-29f963732166260420ffbdebe9eb8b98a009dc8c.zip
cpython-29f963732166260420ffbdebe9eb8b98a009dc8c.tar.gz
cpython-29f963732166260420ffbdebe9eb8b98a009dc8c.tar.bz2
Merge 3.5.2rc1 with current 3.5 branch.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_elementtree.c19
-rw-r--r--Modules/_functoolsmodule.c39
-rw-r--r--Modules/_sqlite/connection.c4
-rw-r--r--Modules/_sqlite/module.h2
4 files changed, 43 insertions, 21 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 0f1d6a1..85ffca2 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1582,10 +1582,23 @@ _elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement)
static PyObject*
element_repr(ElementObject* self)
{
- if (self->tag)
- return PyUnicode_FromFormat("<Element %R at %p>", self->tag, self);
- else
+ int status;
+
+ if (self->tag == NULL)
return PyUnicode_FromFormat("<Element at %p>", self);
+
+ status = Py_ReprEnter((PyObject *)self);
+ if (status == 0) {
+ PyObject *res;
+ res = PyUnicode_FromFormat("<Element %R at %p>", self->tag, self);
+ Py_ReprLeave((PyObject *)self);
+ return res;
+ }
+ if (status > 0)
+ PyErr_Format(PyExc_RuntimeError,
+ "reentrant call inside %s.__repr__",
+ Py_TYPE(self)->tp_name);
+ return NULL;
}
/*[clinic input]
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index 1aa4571..d785c49 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -203,40 +203,45 @@ static PyGetSetDef partial_getsetlist[] = {
static PyObject *
partial_repr(partialobject *pto)
{
- PyObject *result;
+ PyObject *result = NULL;
PyObject *arglist;
- PyObject *tmp;
Py_ssize_t i, n;
PyObject *key, *value;
+ int status;
- arglist = PyUnicode_FromString("");
- if (arglist == NULL) {
- return NULL;
+ status = Py_ReprEnter((PyObject *)pto);
+ if (status != 0) {
+ if (status < 0)
+ return NULL;
+ return PyUnicode_FromFormat("%s(...)", Py_TYPE(pto)->tp_name);
}
+
+ arglist = PyUnicode_FromString("");
+ if (arglist == NULL)
+ goto done;
/* Pack positional arguments */
assert (PyTuple_Check(pto->args));
n = PyTuple_GET_SIZE(pto->args);
for (i = 0; i < n; i++) {
- tmp = PyUnicode_FromFormat("%U, %R", arglist,
- PyTuple_GET_ITEM(pto->args, i));
- Py_DECREF(arglist);
- if (tmp == NULL)
- return NULL;
- arglist = tmp;
+ Py_SETREF(arglist, PyUnicode_FromFormat("%U, %R", arglist,
+ PyTuple_GET_ITEM(pto->args, i)));
+ if (arglist == NULL)
+ goto done;
}
/* Pack keyword arguments */
assert (PyDict_Check(pto->kw));
for (i = 0; PyDict_Next(pto->kw, &i, &key, &value);) {
- tmp = PyUnicode_FromFormat("%U, %U=%R", arglist,
- key, value);
- Py_DECREF(arglist);
- if (tmp == NULL)
- return NULL;
- arglist = tmp;
+ Py_SETREF(arglist, PyUnicode_FromFormat("%U, %U=%R", arglist,
+ key, value));
+ if (arglist == NULL)
+ goto done;
}
result = PyUnicode_FromFormat("%s(%R%U)", Py_TYPE(pto)->tp_name,
pto->fn, arglist);
Py_DECREF(arglist);
+
+ done:
+ Py_ReprLeave((PyObject *)pto);
return result;
}
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 7570624..6aa4764 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -164,6 +164,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
#ifdef WITH_THREAD
self->thread_ident = PyThread_get_thread_ident();
#endif
+ if (!check_same_thread && sqlite3_libversion_number() < 3003001) {
+ PyErr_SetString(pysqlite_NotSupportedError, "shared connections not available");
+ return -1;
+ }
self->check_same_thread = check_same_thread;
self->function_pinboard = PyDict_New();
diff --git a/Modules/_sqlite/module.h b/Modules/_sqlite/module.h
index b51724b..0fb5a55 100644
--- a/Modules/_sqlite/module.h
+++ b/Modules/_sqlite/module.h
@@ -42,7 +42,7 @@ extern PyObject* pysqlite_NotSupportedError;
extern PyObject* time_time;
extern PyObject* time_sleep;
-/* A dictionary, mapping colum types (INTEGER, VARCHAR, etc.) to converter
+/* A dictionary, mapping column types (INTEGER, VARCHAR, etc.) to converter
* functions, that convert the SQL value to the appropriate Python value.
* The key is uppercase.
*/