[pypy-commit] pypy kill-flowobjspace: raise FlowingError on **-unpacking

rlamy noreply at buildbot.pypy.org
Sun Jan 27 18:14:50 CET 2013


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: kill-flowobjspace
Changeset: r60525:352b1a959932
Date: 2013-01-27 16:40 +0000
http://bitbucket.org/pypy/pypy/changeset/352b1a959932/

Log:	raise FlowingError on **-unpacking

diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -971,6 +971,8 @@
         self.pushvalue(last_val)
 
     def call_function(self, oparg, w_star=None, w_starstar=None):
+        if w_starstar is not None:
+            raise FlowingError(self, "Dict-unpacking is not RPython")
         n_arguments = oparg & 0xff
         n_keywords = (oparg>>8) & 0xff
         if n_keywords:
diff --git a/rpython/flowspace/test/test_objspace.py b/rpython/flowspace/test/test_objspace.py
--- a/rpython/flowspace/test/test_objspace.py
+++ b/rpython/flowspace/test/test_objspace.py
@@ -699,6 +699,23 @@
             for op in block.operations:
                 assert not op.opname == "call_args"
 
+    def test_starstar_call(self):
+        """Check that CALL_FUNCTION_KW and CALL_FUNCTION_VAR_KW raise a
+        useful error.
+        """
+        def g(a, b, c):
+            return a*b*c
+        def f1():
+            return g(**{'a':0})
+        with py.test.raises(FlowingError) as excinfo:
+            graph = self.codetest(f1)
+        assert 'Dict-unpacking' in str(excinfo.value)
+        def f2():
+            return g(*(0,), **{'c':3})
+        with py.test.raises(FlowingError) as excinfo:
+            graph = self.codetest(f2)
+        assert 'Dict-unpackinga' in str(excinfo.value)
+
     def test_catch_importerror_1(self):
         def f():
             try:


More information about the pypy-commit mailing list