Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r65359:4229b0f4399f
Date: 2013-07-12 00:13 +0200
http://bitbucket.org/pypy/pypy/changeset/4229b0f4399f/

Log:    Test and fix. (no cookies :-)

diff --git a/pypy/objspace/std/dictmultiobject.py 
b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -1050,7 +1050,7 @@
     else:
         # general case -- "for k in o.keys(): dict.__setitem__(d, k, o[k])"
         data_w = space.listview(space.call_function(w_method))
-        update1_keys(space, w_dict, data_w)
+        update1_keys(space, w_dict, w_data, data_w)
 
 
 @jit.look_inside_iff(lambda space, w_dict, w_data:
@@ -1074,7 +1074,7 @@
         w_dict.setitem(w_key, w_value)
 
 
-def update1_keys(space, w_dict, data_w):
+def update1_keys(space, w_dict, w_data, data_w):
     for w_key in data_w:
         w_value = space.getitem(w_data, w_key)
         w_dict.setitem(w_key, w_value)
diff --git a/pypy/objspace/std/test/test_dictmultiobject.py 
b/pypy/objspace/std/test/test_dictmultiobject.py
--- a/pypy/objspace/std/test/test_dictmultiobject.py
+++ b/pypy/objspace/std/test/test_dictmultiobject.py
@@ -367,6 +367,16 @@
         d.update({'foo': 'bar'}, baz=1)
         assert d == {'foo': 'bar', 'baz': 1}
 
+    def test_update_keys_method(self):
+        class Foo(object):
+            def keys(self):
+                return [4, 1]
+            def __getitem__(self, key):
+                return key * 10
+        d = {}
+        d.update(Foo())
+        assert d == {1: 10, 4: 40}
+
     def test_values(self):
         d = {1: 2, 3: 4}
         vals = d.values()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to