summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/auto/configure6
-rw-r--r--src/configure.in6
-rw-r--r--src/if_py_both.h28
-rw-r--r--src/if_python.c8
-rw-r--r--src/if_python3.c3
-rw-r--r--src/testdir/test86.in49
-rw-r--r--src/testdir/test86.ok3
-rw-r--r--src/testdir/test87.ok3
-rw-r--r--src/version.c2
9 files changed, 40 insertions, 68 deletions
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 <<EOF
+py <<EOF
d=vim.bindeval('{}')
m=vim.bindeval('messages')
-try:
- d['abc']
-except Exception as e:
- m.extend([e.__class__.__name__])
-
-try:
- d['abc']="\0"
-except Exception as e:
- m.extend([e.__class__.__name__])
-
-try:
- d['abc']=vim
-except Exception as e:
- m.extend([e.__class__.__name__])
-
-try:
- d['']=1
-except Exception as e:
- m.extend([e.__class__.__name__])
-
-try:
- d['a\0b']=1
-except Exception as e:
- m.extend([e.__class__.__name__])
+def em(expr, g=globals(), l=locals()):
+ try:
+ exec(expr, g, l)
+ except:
+ m.extend([sys.exc_type.__name__])
-try:
- d[b'a\0b']=1
-except Exception as e:
- m.extend([e.__class__.__name__])
+em('d["abc"]')
+em('d["abc"]="\\0"')
+em('d["abc"]=vim')
+em('d[""]=1')
+em('d["a\\0b"]=1')
+em('d[u"a\\0b"]=1')
EOF
:$put =messages
:unlet messages
@@ -394,14 +377,14 @@ py << EOF
def e(s, g=globals(), l=locals()):
try:
exec(s, g, l)
- except Exception as e:
- vim.command('throw ' + repr(e.__class__.__name__))
+ except:
+ vim.command('throw ' + repr(sys.exc_type.__name__))
def ev(s, g=globals(), l=locals()):
try:
return eval(s, g, l)
- except Exception as e:
- vim.command('throw ' + repr(e.__class__.__name__))
+ except:
+ vim.command('throw ' + repr(sys.exc_type.__name__))
return 0
EOF
:function E(s)
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
index 4b54d985f..481acae7d 100644
--- a/src/testdir/test86.ok
+++ b/src/testdir/test86.ok
@@ -82,7 +82,6 @@ def
bar
>>> 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
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 948,
+/**/
947,
/**/
946,