# HG changeset patch # User Bram Moolenaar # Date 1368622295 -7200 # Node ID a6f0544df95e5f783861d3c67d84bc5a28a315da # Parent d5dbc2cea5b36468e050c6b899e619ed16502e16 updated for version 7.3.948 Problem: Cannot build with Python 2.2 Solution: Make Python interface work with Python 2.2 Make 2.2 the first supported version. (ZyX) diff --git a/src/auto/configure b/src/auto/configure --- a/src/auto/configure +++ b/src/auto/configure @@ -5289,10 +5289,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5 $as_echo "$vi_cv_var_python_version" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 1.4 or better" >&5 -$as_echo_n "checking Python is 1.4 or better... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.2 or better" >&5 +$as_echo_n "checking Python is 2.2 or better... " >&6; } if ${vi_cv_path_python} -c \ - "import sys; sys.exit(${vi_cv_var_python_version} < 1.4)" + "import sys; sys.exit(${vi_cv_var_python_version} < 2.2)" then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5 $as_echo "yep" >&6; } diff --git a/src/configure.in b/src/configure.in --- a/src/configure.in +++ b/src/configure.in @@ -863,10 +863,10 @@ if test "$enable_pythoninterp" = "yes" - ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'` ]]) - dnl -- it must be at least version 1.4 - AC_MSG_CHECKING(Python is 1.4 or better) + dnl -- it must be at least version 2.2 + AC_MSG_CHECKING(Python is 2.2 or better) if ${vi_cv_path_python} -c \ - "import sys; sys.exit(${vi_cv_var_python_version} < 1.4)" + "import sys; sys.exit(${vi_cv_var_python_version} < 2.2)" then AC_MSG_RESULT(yep) diff --git a/src/if_py_both.h b/src/if_py_both.h --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -564,6 +564,7 @@ IterNew(void *start, destructorfun destr return (PyObject *)(self); } +#if 0 /* unused */ static void IterDestructor(PyObject *self) { @@ -573,6 +574,7 @@ IterDestructor(PyObject *self) DESTRUCTOR_FINISH(self); } +#endif static PyObject * IterNext(PyObject *self) @@ -696,13 +698,7 @@ DictionarySetattr(PyObject *self, char * } else { - if (!PyBool_Check(val)) - { - PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed")); - return -1; - } - - if (val == Py_True) + if (PyObject_IsTrue(val)) this->dict->dv_lock = VAR_LOCKED; else this->dict->dv_lock = 0; @@ -1202,13 +1198,7 @@ ListSetattr(PyObject *self, char *name, } else { - if (!PyBool_Check(val)) - { - PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed")); - return -1; - } - - if (val == Py_True) + if (PyObject_IsTrue(val)) this->list->lv_lock = VAR_LOCKED; else this->list->lv_lock = 0; @@ -1484,14 +1474,8 @@ OptionsAssItem(OptionsObject *this, PyOb if (flags & SOPT_BOOL) { - if (!PyBool_Check(valObject)) - { - PyErr_SetString(PyExc_ValueError, "Object must be boolean"); - return -1; - } - - r = set_option_value_for(key, (valObject == Py_True), NULL, opt_flags, - this->opt_type, this->from); + r = set_option_value_for(key, PyObject_IsTrue(valObject), NULL, + opt_flags, this->opt_type, this->from); } else if (flags & SOPT_NUM) { diff --git a/src/if_python.c b/src/if_python.c --- a/src/if_python.c +++ b/src/if_python.c @@ -229,6 +229,7 @@ struct PyMethodDef { Py_ssize_t a; }; # define _Py_TrueStruct (*dll__Py_TrueStruct) # define PyObject_Init dll__PyObject_Init # define PyObject_GetIter dll_PyObject_GetIter +# define PyObject_IsTrue dll_PyObject_IsTrue # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 # define PyType_IsSubtype dll_PyType_IsSubtype # endif @@ -324,6 +325,7 @@ static int(*dll_Py_IsInitialized)(void); static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *); static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *); static PyObject* (*dll_PyObject_GetIter)(PyObject *); +static int (*dll_PyObject_IsTrue)(PyObject *); # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 static iternextfunc dll__PyObject_NextNotImplemented; # endif @@ -459,6 +461,7 @@ static struct {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New}, {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init}, {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter}, + {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue}, # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented}, # endif @@ -787,7 +790,10 @@ Python_Init(void) * so the following does both: unlock GIL and save thread state in TLS * without deleting thread state */ - PyEval_SaveThread(); +#ifndef PY_CAN_RECURSE + saved_python_thread = +#endif + PyEval_SaveThread(); initialised = 1; } diff --git a/src/if_python3.c b/src/if_python3.c --- a/src/if_python3.c +++ b/src/if_python3.c @@ -156,6 +156,7 @@ static void init_structs(void); # define PyMapping_Items py3_PyMapping_Items # define PyIter_Next py3_PyIter_Next # define PyObject_GetIter py3_PyObject_GetIter +# define PyObject_IsTrue py3_PyObject_IsTrue # define PyModule_GetDict py3_PyModule_GetDict #undef PyRun_SimpleString # define PyRun_SimpleString py3_PyRun_SimpleString @@ -264,6 +265,7 @@ static PyObject* (*py3_PyLong_FromLong)( static PyObject* (*py3_PyDict_New)(void); static PyObject* (*py3_PyIter_Next)(PyObject *); static PyObject* (*py3_PyObject_GetIter)(PyObject *); +static int (*py3_PyObject_IsTrue)(PyObject *); static PyObject* (*py3_Py_BuildValue)(char *, ...); static int (*py3_PyType_Ready)(PyTypeObject *type); static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); @@ -392,6 +394,7 @@ static struct {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items}, {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next}, {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter}, + {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue}, {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, diff --git a/src/testdir/test86.in b/src/testdir/test86.in --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -183,38 +183,21 @@ STARTTEST : $put ='[0.0, 0.0]' :endif :let messages=[] -:py <>> paste p/gopts1: False - inv: 2! ValueError p/wopts1! KeyError inv: 2! KeyError wopts1! KeyError @@ -224,7 +223,6 @@ bar wopts2! KeyError wopts3! KeyError p/bopts1: False - inv: 2! ValueError G: 0 W: 1:0 2:1 3:0 4:1 B: 1:0 2:1 3:0 4:1 @@ -280,7 +278,6 @@ bar wopts2! KeyError wopts3! KeyError p/bopts1: False - inv: 2! ValueError G: 0 W: 1:0 2:1 3:0 4:1 B: 1:0 2:1 3:0 4:1 diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok --- a/src/testdir/test87.ok +++ b/src/testdir/test87.ok @@ -71,7 +71,6 @@ def bar >>> paste p/gopts1: False - inv: 2! ValueError p/wopts1! KeyError inv: 2! KeyError wopts1! KeyError @@ -213,7 +212,6 @@ bar wopts2! KeyError wopts3! KeyError p/bopts1: False - inv: 2! ValueError G: 0 W: 1:0 2:1 3:0 4:1 B: 1:0 2:1 3:0 4:1 @@ -269,7 +267,6 @@ bar wopts2! KeyError wopts3! KeyError p/bopts1: False - inv: 2! ValueError G: 0 W: 1:0 2:1 3:0 4:1 B: 1:0 2:1 3:0 4:1 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 948, +/**/ 947, /**/ 946,