diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-09-13 18:38:54 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-09-13 18:38:54 (GMT) |
commit | 9665637d44a186374629b0016143d5eb48ca3252 (patch) | |
tree | d809ebbf5b7fe1b16d49ae89bfbc6141285b4d34 /Lib/trace.py | |
parent | 9ad66d2032a00b3af9cfccdca3edb59eb9cce64c (diff) | |
download | cpython-9665637d44a186374629b0016143d5eb48ca3252.zip cpython-9665637d44a186374629b0016143d5eb48ca3252.tar.gz cpython-9665637d44a186374629b0016143d5eb48ca3252.tar.bz2 |
Merged revisions 84780-84781 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
with some manual fixes
........
r84780 | alexander.belopolsky | 2010-09-13 14:14:34 -0400 (Mon, 13 Sep 2010) | 3 lines
Issue #9315: Fix for the trace module to record correct class name
when tracing methods. Unit tests. Patch by Eli Bendersky.
........
r84781 | alexander.belopolsky | 2010-09-13 14:15:33 -0400 (Mon, 13 Sep 2010) | 1 line
Removed debugging setting
........
Diffstat (limited to 'Lib/trace.py')
-rw-r--r-- | Lib/trace.py | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/Lib/trace.py b/Lib/trace.py index f408705..c98a6db 100644 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -57,7 +57,7 @@ import threading import time import token import tokenize -import types +import inspect import gc import pickle @@ -395,7 +395,7 @@ def find_lines(code, strs): # and check the constants for references to other code objects for c in code.co_consts: - if isinstance(c, types.CodeType): + if inspect.iscode(c): # find another code object, so recurse into it linenos.update(find_lines(c, strs)) return linenos @@ -544,7 +544,7 @@ class Trace: ## use of gc.get_referrers() was suggested by Michael Hudson # all functions which refer to this code object funcs = [f for f in gc.get_referrers(code) - if hasattr(f, "__doc__")] + if inspect.isfunction(f)] # require len(func) == 1 to avoid ambiguity caused by calls to # new.function(): "In the face of ambiguity, refuse the # temptation to guess." @@ -556,17 +556,13 @@ class Trace: if hasattr(c, "__bases__")] if len(classes) == 1: # ditto for new.classobj() - clsname = str(classes[0]) + clsname = classes[0].__name__ # cache the result - assumption is that new.* is # not called later to disturb this relationship # _caller_cache could be flushed if functions in # the new module get called. self._caller_cache[code] = clsname if clsname is not None: - # final hack - module name shows up in str(cls), but we've already - # computed module name, so remove it - clsname = clsname.split(".")[1:] - clsname = ".".join(clsname) funcname = "%s.%s" % (clsname, funcname) return filename, modulename, funcname |