Commit 4f4913b3 authored by Yury Selivanov's avatar Yury Selivanov

Issue #24485: Revert backwards compatibility breaking changes of #21217.

parent 4887523c
...@@ -902,14 +902,6 @@ def getblock(lines): ...@@ -902,14 +902,6 @@ def getblock(lines):
pass pass
return lines[:blockfinder.last] return lines[:blockfinder.last]
def _line_number_helper(code_obj, lines, lnum):
"""Return a list of source lines and starting line number for a code object.
The arguments must be a code object with lines and lnum from findsource.
"""
_, end_line = list(dis.findlinestarts(code_obj))[-1]
return lines[lnum:end_line], lnum + 1
def getsourcelines(object): def getsourcelines(object):
"""Return a list of source lines and starting line number for an object. """Return a list of source lines and starting line number for an object.
...@@ -921,16 +913,8 @@ def getsourcelines(object): ...@@ -921,16 +913,8 @@ def getsourcelines(object):
object = unwrap(object) object = unwrap(object)
lines, lnum = findsource(object) lines, lnum = findsource(object)
if ismodule(object): if ismodule(object): return lines, 0
return lines, 0 else: return getblock(lines[lnum:]), lnum + 1
elif iscode(object):
return _line_number_helper(object, lines, lnum)
elif isfunction(object):
return _line_number_helper(object.__code__, lines, lnum)
elif ismethod(object):
return _line_number_helper(object.__func__.__code__, lines, lnum)
else:
return getblock(lines[lnum:]), lnum + 1
def getsource(object): def getsource(object):
"""Return the text of the source code for an object. """Return the text of the source code for an object.
......
...@@ -130,3 +130,10 @@ def decorator(func): ...@@ -130,3 +130,10 @@ def decorator(func):
@decorator @decorator
def real(): def real():
return 20 return 20
#line 134
class cls135:
def func136():
def func137():
never_reached1
never_reached2
...@@ -464,6 +464,7 @@ class TestDecorators(GetSourceBase): ...@@ -464,6 +464,7 @@ class TestDecorators(GetSourceBase):
def test_getsource_unwrap(self): def test_getsource_unwrap(self):
self.assertSourceEqual(mod2.real, 130, 132) self.assertSourceEqual(mod2.real, 130, 132)
@unittest.expectedFailure
def test_decorator_with_lambda(self): def test_decorator_with_lambda(self):
self.assertSourceEqual(mod2.func114, 113, 115) self.assertSourceEqual(mod2.func114, 113, 115)
...@@ -563,6 +564,10 @@ class TestBuggyCases(GetSourceBase): ...@@ -563,6 +564,10 @@ class TestBuggyCases(GetSourceBase):
def test_getsource_on_method(self): def test_getsource_on_method(self):
self.assertSourceEqual(mod2.ClassWithMethod.method, 118, 119) self.assertSourceEqual(mod2.ClassWithMethod.method, 118, 119)
def test_nested_func(self):
self.assertSourceEqual(mod2.cls135.func136, 136, 139)
class TestNoEOL(GetSourceBase): class TestNoEOL(GetSourceBase):
def setUp(self): def setUp(self):
self.tempdir = TESTFN + '_dir' self.tempdir = TESTFN + '_dir'
......
...@@ -551,10 +551,6 @@ Library ...@@ -551,10 +551,6 @@ Library
- Issue #23342: Add a subprocess.run() function than returns a CalledProcess - Issue #23342: Add a subprocess.run() function than returns a CalledProcess
instance for a more consistent API than the existing call* functions. instance for a more consistent API than the existing call* functions.
- Issue #21217: inspect.getsourcelines() now tries to compute the start and end
lines from the code object, fixing an issue when a lambda function is used as
decorator argument. Patch by Thomas Ballinger and Allison Kaptur.
- Issue #24521: Fix possible integer overflows in the pickle module. - Issue #24521: Fix possible integer overflows in the pickle module.
- Issue #22931: Allow '[' and ']' in cookie values. - Issue #22931: Allow '[' and ']' in cookie values.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment