Author: Raffael Tfirst <[email protected]>
Branch: py3.5-async
Changeset: r86156:ab59452c8103
Date: 2016-08-11 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/ab59452c8103/
Log: Fix and rename test_crap_after_starargs (allowed in PEP 448), dirty
fix in function calls if argument order is reversed (happens if
stararg occurs after kwarg)
diff --git a/pypy/interpreter/astcompiler/test/test_compiler.py
b/pypy/interpreter/astcompiler/test/test_compiler.py
--- a/pypy/interpreter/astcompiler/test/test_compiler.py
+++ b/pypy/interpreter/astcompiler/test/test_compiler.py
@@ -779,9 +779,19 @@
py.test.raises(SyntaxError, self.simple_test, "int(base=10, '2')",
None, None)
- def test_crap_after_starargs(self):
- source = "call(*args, *args)"
- py.test.raises(SyntaxError, self.simple_test, source, None, None)
+ def test_starargs_after_starargs(self):
+ #allowed since PEP 448 "Additional Unpacking Generalizations"
+ source = py.code.Source("""
+ def call(*arg):
+ ret = []
+ for i in arg:
+ ret.append(i)
+ return ret
+
+ args = [4,5,6]
+ res = call(*args, *args)
+ """)
+ self.simple_test(source, 'res', [4,5,6,4,5,6])
def test_not_a_name(self):
source = "call(a, b, c, 3=3)"
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1214,6 +1214,14 @@
break
w_value = self.popvalue()
w_key = self.popvalue()
+ # temporary (dirty) fix: if star-arg occurs after kwarg,
+ # arg order is reversed on stack
+ from pypy.objspace.std.listobject import W_ListObject
+ if isinstance(w_key, W_ListObject):
+ w_key_temp = w_key
+ w_key = w_value
+ w_value = w_star
+ w_star = w_key_temp
key = self.space.identifier_w(w_key)
keywords[n_keywords] = key
keywords_w[n_keywords] = w_value
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit