Author: Martin Matusiak <[email protected]>
Branch: py3.3-fixes
Changeset: r72628:0a5f64f5722e
Date: 2014-07-31 19:02 +0200
http://bitbucket.org/pypy/pypy/changeset/0a5f64f5722e/
Log: fix incorrect value of kwargname (issue #1831)
diff --git a/pypy/interpreter/pycode.py b/pypy/interpreter/pycode.py
--- a/pypy/interpreter/pycode.py
+++ b/pypy/interpreter/pycode.py
@@ -60,7 +60,7 @@
else:
varargname = None
if code.co_flags & CO_VARKEYWORDS:
- kwargname = code.co_varnames[argcount]
+ kwargname = code.co_varnames[argcount+kwonlyargcount]
argcount += 1
else:
kwargname = None
diff --git a/pypy/interpreter/test/test_compiler.py
b/pypy/interpreter/test/test_compiler.py
--- a/pypy/interpreter/test/test_compiler.py
+++ b/pypy/interpreter/test/test_compiler.py
@@ -714,6 +714,22 @@
else:
py.test.fail("Did not raise")
+ def test_signature_kwargname(self):
+ from pypy.interpreter.pycode import cpython_code_signature
+ from pypy.interpreter.signature import Signature
+
+ snippet = 'def f(a, b, m=1, n=2, **kwargs): pass'
+ containing_co = self.compiler.compile(snippet, '<string>', 'single', 0)
+ co = containing_co.co_consts_w[2]
+ sig = cpython_code_signature(co)
+ assert sig == Signature(['a', 'b', 'm', 'n'], None, 'kwargs', [])
+
+ snippet = 'def f(a, b, *, m=1, n=2, **kwargs): pass'
+ containing_co = self.compiler.compile(snippet, '<string>', 'single', 0)
+ co = containing_co.co_consts_w[4]
+ sig = cpython_code_signature(co)
+ assert sig == Signature(['a', 'b'], None, 'kwargs', ['m', 'n'])
+
class AppTestCompiler:
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit