[Python-checkins] CVS: python/dist/src/Lib/hotshot log.py,1.2,1.3

Fred L. Drake fdrake@users.sourceforge.net
Mon, 15 Oct 2001 15:05:34 -0700


Update of /cvsroot/python/python/dist/src/Lib/hotshot
In directory usw-pr-cvs1:/tmp/cvs-serv25918/Lib/hotshot

Modified Files:
	log.py 
Log Message:
Avoid deep recursion when reading the header of the log file.
Add support for extracting function names from the log file, keeping the
extract-names-from-sources support as a fallback.


Index: log.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/hotshot/log.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** log.py	2001/10/13 02:55:40	1.2
--- log.py	2001/10/15 22:05:32	1.3
***************
*** 10,13 ****
--- 10,14 ----
       WHAT_LINENO, \
       WHAT_DEFINE_FILE, \
+      WHAT_DEFINE_FUNC, \
       WHAT_ADD_INFO
  
***************
*** 45,77 ****
  
      def next(self, index=0):
!         try:
!             what, tdelta, fileno, lineno = self._nextitem()
!         except TypeError:
!             # logreader().next() returns None at the end
!             self._reader.close()
!             raise StopIteration()
!         if what == WHAT_DEFINE_FILE:
!             self._filemap[fileno] = tdelta
!             return self.next()
!         if what == WHAT_ADD_INFO:
!             key = tdelta.lower()
              try:
!                 L = self._info[key]
!             except KeyError:
!                 L = []
!                 self._info[key] = L
!             L.append(lineno)
!             if key == "current-directory":
!                 self.cwd = lineno
!             return self.next()
!         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:
!             filename, funcname, firstlineno = self._stack[-1]
!         return what, (filename, lineno, funcname), tdelta
  
      if sys.version < "2.2":
--- 46,83 ----
  
      def next(self, index=0):
!         while 1:
              try:
!                 what, tdelta, fileno, lineno = self._nextitem()
!             except TypeError:
!                 # logreader().next() returns None at the end
!                 self._reader.close()
!                 raise StopIteration()
!             if what == WHAT_DEFINE_FILE:
!                 self._filemap[fileno] = tdelta
!                 continue
!             if what == WHAT_DEFINE_FUNC:
!                 filename = self._filemap[fileno]
!                 self._funcmap[(fileno, lineno)] = (filename, tdelta)
!                 continue
!             if what == WHAT_ADD_INFO:
!                 key = tdelta.lower()
!                 try:
!                     L = self._info[key]
!                 except KeyError:
!                     L = []
!                     self._info[key] = L
!                 L.append(lineno)
!                 if key == "current-directory":
!                     self.cwd = 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:
!                 filename, funcname, firstlineno = self._stack[-1]
!             return what, (filename, lineno, funcname), tdelta
  
      if sys.version < "2.2":
***************
*** 91,94 ****
--- 97,105 ----
              return self._funcmap[(fileno, lineno)]
          except KeyError:
+             #
+             # This should only be needed when the log file does not
+             # contain all the DEFINE_FUNC records needed to allow the
+             # function name to be retrieved from the log file.
+             #
              if self._loadfile(fileno):
                  filename = funcname = None