mirror of
https://github.com/python/cpython.git
synced 2025-10-22 06:32:43 +00:00
This commit is contained in:
parent
4887523c03
commit
4f4913b38b
4 changed files with 14 additions and 22 deletions
|
@ -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):
|
||||||
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):
|
||||||
@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):
|
||||||
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):
|
||||||
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
|
||||||
- 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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue