Commit 84f9732e authored by Fred Drake's avatar Fred Drake

Set/update self.cwd properly.

parent f6d9d431
...@@ -37,7 +37,13 @@ class LogReader: ...@@ -37,7 +37,13 @@ class LogReader:
self._reader = _hotshot.logreader(logfn) self._reader = _hotshot.logreader(logfn)
self._nextitem = self._reader.next self._nextitem = self._reader.next
self._info = self._reader.info self._info = self._reader.info
if self._info.has_key('current-directory'):
self.cwd = self._info['current-directory']
else:
self.cwd = None
self._stack = [] self._stack = []
self._append = self._stack.append
self._pop = self._stack.pop
def addinfo(self, key, value): def addinfo(self, key, value):
"""This method is called for each additional ADD_INFO record. """This method is called for each additional ADD_INFO record.
...@@ -53,6 +59,28 @@ class LogReader: ...@@ -53,6 +59,28 @@ class LogReader:
""" """
pass pass
def get_filename(self, fileno):
try:
return self._filemap[fileno]
except KeyError:
raise ValueError, "unknown fileno"
def get_filenames(self):
return self._filemap.values()
def get_fileno(self, filename):
filename = os.path.normcase(os.path.normpath(filename))
for fileno, name in self._filemap.items():
if name == filename:
return fileno
raise ValueError, "unknown filename"
def get_funcname(self, fileno, lineno):
try:
return self._funcmap[(fileno, lineno)]
except KeyError:
raise ValueError, "unknown function location"
# Iteration support: # Iteration support:
# This adds an optional (& ignored) parameter to next() so that the # This adds an optional (& ignored) parameter to next() so that the
# same bound method can be used as the __getitem__() method -- this # same bound method can be used as the __getitem__() method -- this
...@@ -66,28 +94,37 @@ class LogReader: ...@@ -66,28 +94,37 @@ class LogReader:
# logreader().next() returns None at the end # logreader().next() returns None at the end
self._reader.close() self._reader.close()
raise StopIteration() raise StopIteration()
# handle the most common cases first
if what == WHAT_ENTER:
filename, funcname = self._decode_location(fileno, lineno)
self._append((filename, funcname, lineno))
return what, (filename, lineno, funcname), tdelta
if what == WHAT_EXIT:
filename, funcname, lineno = self._pop()
return what, (filename, lineno, funcname), tdelta
if what == WHAT_LINENO:
filename, funcname, firstlineno = self._stack[-1]
return what, (filename, lineno, funcname), tdelta
if what == WHAT_DEFINE_FILE: if what == WHAT_DEFINE_FILE:
self._filemap[fileno] = tdelta filename = os.path.normcase(os.path.normpath(tdelta))
continue self._filemap[fileno] = filename
if what == WHAT_DEFINE_FUNC: elif what == WHAT_DEFINE_FUNC:
filename = self._filemap[fileno] filename = self._filemap[fileno]
self._funcmap[(fileno, lineno)] = (filename, tdelta) self._funcmap[(fileno, lineno)] = (filename, tdelta)
continue elif what == WHAT_ADD_INFO:
if what == WHAT_ADD_INFO:
# value already loaded into self.info; call the # value already loaded into self.info; call the
# overridable addinfo() handler so higher-level code # overridable addinfo() handler so higher-level code
# can pick up the new value # can pick up the new value
if tdelta == 'current-directory':
self.cwd = lineno
self.addinfo(tdelta, lineno) self.addinfo(tdelta, lineno)
continue
if what == WHAT_ENTER:
t = self._decode_location(fileno, lineno)
filename, funcname = t
self._stack.append((filename, funcname, lineno))
elif what == WHAT_EXIT:
filename, funcname, lineno = self._stack.pop()
else: else:
filename, funcname, firstlineno = self._stack[-1] raise ValueError, "unknown event type"
return what, (filename, lineno, funcname), tdelta
if sys.version < "2.2": if sys.version < "2.2":
# Don't add this for newer Python versions; we only want iteration # Don't add this for newer Python versions; we only want iteration
......
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