changeset 5659:ae228baaec2c v7.4.176

updated for version 7.4.176 Problem: Dictionary.update() thows an error when used without arguments. Python programmers don't expect that. Solution: Make Dictionary.update() without arguments do nothing. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Tue, 11 Feb 2014 18:47:27 +0100
parents 71c900ce7632
children 45f106e69464
files src/if_py_both.h src/testdir/test86.in src/testdir/test87.in src/version.c
diffstat 4 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -1918,11 +1918,17 @@ DictionaryUpdate(DictionaryObject *self,
     }
     else
     {
-	PyObject	*obj;
-
-	if (!PyArg_ParseTuple(args, "O", &obj))
+	PyObject	*obj = NULL;
+
+	if (!PyArg_ParseTuple(args, "|O", &obj))
 	    return NULL;
 
+	if (obj == NULL)
+	{
+	    Py_INCREF(Py_None);
+	    return Py_None;
+	}
+
 	if (PyObject_HasAttrString(obj, "keys"))
 	    return DictionaryUpdate(self, NULL, obj);
 	else
--- a/src/testdir/test86.in
+++ b/src/testdir/test86.in
@@ -39,6 +39,7 @@ STARTTEST
 py << EOF
 d=vim.bindeval('d')
 d['1']='asd'
+d.update()  # Must not do anything, including throwing errors
 d.update(b=[1, 2, f])
 d.update((('-1', {'a': 1}),))
 d.update({'0': -1})
--- a/src/testdir/test87.in
+++ b/src/testdir/test87.in
@@ -33,6 +33,7 @@ STARTTEST
 py3 << EOF
 d=vim.bindeval('d')
 d['1']='asd'
+d.update()  # Must not do anything, including throwing errors
 d.update(b=[1, 2, f])
 d.update((('-1', {'a': 1}),))
 d.update({'0': -1})
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    176,
+/**/
     175,
 /**/
     174,