Author: Raffael Tfirst <raffael.tfi...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit