From: Bram Moolenaar Date: Wed, 15 May 2013 12:51:35 +0000 (+0200) Subject: updated for version 7.3.948 X-Git-Tag: v7.3.948 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=03db85b398746a252345ed8a7da69f0f2591e932;p=vim 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 index 613094589..0559ce23c 100755 --- 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 index 34a75b3cd..886c5f3f4 100644 --- a/src/configure.in +++ b/src/configure.in @@ -863,10 +863,10 @@ if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; th ${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 index 6370bd18a..6f9166950 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -564,6 +564,7 @@ IterNew(void *start, destructorfun destruct, nextfun next) 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 *name, PyObject *val) } 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, PyObject *val) } 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, PyObject *keyObject, PyObject *valObject) 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 index 56db2b273..575f82200 100644 --- 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 index cae18c25e..477c367ef 100644 --- 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)(long); 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 index 5b87633a7..8ef7e057f 100644 --- 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 index e7d031bfb..3addec8b3 100644 --- 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 index 3e4c310d7..a6ebcab23 100644 --- a/src/version.c +++ b/src/version.c @@ -728,6 +728,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 948, /**/ 947, /**/