diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-11 21:52:40 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-11 21:52:40 (GMT) |
commit | b72810583e68531bb4231f42f1ce3ff4c0c9958b (patch) | |
tree | 410e81d9e6d1b561ccd96372319e0b5eb53eec34 /Lib | |
parent | 29097d5a6aa13729583f98cd09923f97addb7819 (diff) | |
download | cpython-b72810583e68531bb4231f42f1ce3ff4c0c9958b.zip cpython-b72810583e68531bb4231f42f1ce3ff4c0c9958b.tar.gz cpython-b72810583e68531bb4231f42f1ce3ff4c0c9958b.tar.bz2 |
Issue #27213: Fixed different issues with reworked CALL_FUNCTION* opcodes.
* BUILD_TUPLE_UNPACK and BUILD_MAP_UNPACK_WITH_CALL no longer generated with
single tuple or dict.
* Restored more informative error messages for incorrect var-positional and
var-keyword arguments.
* Removed code duplications in _PyEval_EvalCodeWithName().
* Removed redundant runtime checks and parameters in _PyStack_AsDict().
* Added a workaround and enabled previously disabled test in test_traceback.
* Removed dead code from the dis module.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/dis.py | 2 | ||||
-rw-r--r-- | Lib/test/test_extcall.py | 18 | ||||
-rw-r--r-- | Lib/test/test_traceback.py | 3 |
3 files changed, 11 insertions, 12 deletions
@@ -314,8 +314,6 @@ def _get_instructions_bytes(code, varnames=None, names=None, constants=None, argrepr = argval elif op in hasfree: argval, argrepr = _get_name_info(arg, cells) - elif op in hasnargs: # unused - argrepr = "%d positional, %d keyword pair" % (arg%256, arg//256) yield Instruction(opname[op], op, arg, argval, argrepr, offset, starts_line, is_jump_target) diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py index 55f1393..5eea379 100644 --- a/Lib/test/test_extcall.py +++ b/Lib/test/test_extcall.py @@ -118,7 +118,7 @@ Verify clearing of SF bug #733667 >>> g(*Nothing()) Traceback (most recent call last): ... - TypeError: 'Nothing' object is not iterable + TypeError: g() argument after * must be an iterable, not Nothing >>> class Nothing: ... def __len__(self): return 5 @@ -127,7 +127,7 @@ Verify clearing of SF bug #733667 >>> g(*Nothing()) Traceback (most recent call last): ... - TypeError: 'Nothing' object is not iterable + TypeError: g() argument after * must be an iterable, not Nothing >>> class Nothing(): ... def __len__(self): return 5 @@ -231,32 +231,34 @@ What about willful misconduct? >>> h(*h) Traceback (most recent call last): ... - TypeError: 'function' object is not iterable + TypeError: h() argument after * must be an iterable, not function >>> dir(*h) Traceback (most recent call last): ... - TypeError: 'function' object is not iterable + TypeError: dir() argument after * must be an iterable, not function >>> None(*h) Traceback (most recent call last): ... - TypeError: 'function' object is not iterable + TypeError: NoneType object argument after * must be an iterable, \ +not function >>> h(**h) Traceback (most recent call last): ... - TypeError: 'function' object is not a mapping + TypeError: h() argument after ** must be a mapping, not function >>> dir(**h) Traceback (most recent call last): ... - TypeError: 'function' object is not a mapping + TypeError: dir() argument after ** must be a mapping, not function >>> None(**h) Traceback (most recent call last): ... - TypeError: 'function' object is not a mapping + TypeError: NoneType object argument after ** must be a mapping, \ +not function >>> dir(b=1, **{'b': 1}) Traceback (most recent call last): diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 037d883..ac067bf 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -304,7 +304,6 @@ class TracebackFormatTests(unittest.TestCase): ]) # issue 26823 - Shrink recursive tracebacks - @unittest.skipIf(True, "FIXME: test broken, see issue #28050") def _check_recursive_traceback_display(self, render_exc): # Always show full diffs when this test fails # Note that rearranging things may require adjusting @@ -353,7 +352,7 @@ class TracebackFormatTests(unittest.TestCase): # Check the recursion count is roughly as expected rec_limit = sys.getrecursionlimit() - self.assertIn(int(re.search(r"\d+", actual[-2]).group()), range(rec_limit-50, rec_limit)) + self.assertIn(int(re.search(r"\d+", actual[-2]).group()), range(rec_limit-60, rec_limit)) # Check a known (limited) number of recursive invocations def g(count=10): |