home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_592 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.6 KB  |  185 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import _hotshot
  5. import os.path as os
  6. import parser
  7. import symbol
  8. from _hotshot import WHAT_ENTER, WHAT_EXIT, WHAT_LINENO, WHAT_DEFINE_FILE, WHAT_DEFINE_FUNC, WHAT_ADD_INFO
  9. __all__ = [
  10.     'LogReader',
  11.     'ENTER',
  12.     'EXIT',
  13.     'LINE']
  14. ENTER = WHAT_ENTER
  15. EXIT = WHAT_EXIT
  16. LINE = WHAT_LINENO
  17.  
  18. class LogReader:
  19.     
  20.     def __init__(self, logfn):
  21.         self._filemap = { }
  22.         self._funcmap = { }
  23.         self._reader = _hotshot.logreader(logfn)
  24.         self._nextitem = self._reader.next
  25.         self._info = self._reader.info
  26.         if self._info.has_key('current-directory'):
  27.             self.cwd = self._info['current-directory']
  28.         else:
  29.             self.cwd = None
  30.         self._stack = []
  31.         self._append = self._stack.append
  32.         self._pop = self._stack.pop
  33.  
  34.     
  35.     def close(self):
  36.         self._reader.close()
  37.  
  38.     
  39.     def fileno(self):
  40.         return self._reader.fileno()
  41.  
  42.     
  43.     def addinfo(self, key, value):
  44.         pass
  45.  
  46.     
  47.     def get_filename(self, fileno):
  48.         
  49.         try:
  50.             return self._filemap[fileno]
  51.         except KeyError:
  52.             raise ValueError, 'unknown fileno'
  53.  
  54.  
  55.     
  56.     def get_filenames(self):
  57.         return self._filemap.values()
  58.  
  59.     
  60.     def get_fileno(self, filename):
  61.         filename = os.path.normcase(os.path.normpath(filename))
  62.         for fileno, name in self._filemap.items():
  63.             if name == filename:
  64.                 return fileno
  65.         
  66.         raise ValueError, 'unknown filename'
  67.  
  68.     
  69.     def get_funcname(self, fileno, lineno):
  70.         
  71.         try:
  72.             return self._funcmap[(fileno, lineno)]
  73.         except KeyError:
  74.             raise ValueError, 'unknown function location'
  75.  
  76.  
  77.     
  78.     def next(self, index = 0):
  79.         while None:
  80.             (what, tdelta, fileno, lineno) = self._nextitem()
  81.             if what == WHAT_ENTER:
  82.                 (filename, funcname) = self._decode_location(fileno, lineno)
  83.                 t = (filename, lineno, funcname)
  84.                 self._append(t)
  85.                 return (what, t, tdelta)
  86.             if what == WHAT_EXIT:
  87.                 return (what, self._pop(), tdelta)
  88.             if what == WHAT_LINENO:
  89.                 (filename, firstlineno, funcname) = self._stack[-1]
  90.                 return (what, (filename, lineno, funcname), tdelta)
  91.             if what == WHAT_DEFINE_FILE:
  92.                 filename = os.path.normcase(os.path.normpath(tdelta))
  93.                 self._filemap[fileno] = filename
  94.                 continue
  95.             if what == WHAT_DEFINE_FUNC:
  96.                 filename = self._filemap[fileno]
  97.                 self._funcmap[(fileno, lineno)] = (filename, tdelta)
  98.                 continue
  99.             what == WHAT_EXIT
  100.             if what == WHAT_ADD_INFO:
  101.                 if tdelta == 'current-directory':
  102.                     self.cwd = lineno
  103.                 
  104.                 self.addinfo(tdelta, lineno)
  105.                 continue
  106.             raise ValueError, 'unknown event type'
  107.             continue
  108.             return None
  109.  
  110.     
  111.     def __iter__(self):
  112.         return self
  113.  
  114.     
  115.     def _decode_location(self, fileno, lineno):
  116.         
  117.         try:
  118.             return self._funcmap[(fileno, lineno)]
  119.         except KeyError:
  120.             if self._loadfile(fileno):
  121.                 filename = None
  122.                 funcname = None
  123.             
  124.             
  125.             try:
  126.                 (filename, funcname) = self._funcmap[(fileno, lineno)]
  127.             except KeyError:
  128.                 filename = self._filemap.get(fileno)
  129.                 funcname = None
  130.                 self._funcmap[(fileno, lineno)] = (filename, funcname)
  131.             except:
  132.                 None<EXCEPTION MATCH>KeyError
  133.             
  134.  
  135.             None<EXCEPTION MATCH>KeyError
  136.  
  137.         return (filename, funcname)
  138.  
  139.     
  140.     def _loadfile(self, fileno):
  141.         
  142.         try:
  143.             filename = self._filemap[fileno]
  144.         except KeyError:
  145.             print 'Could not identify fileId', fileno
  146.             return 1
  147.  
  148.         if filename is None:
  149.             return 1
  150.         absname = os.path.normcase(os.path.join(self.cwd, filename))
  151.         
  152.         try:
  153.             fp = open(absname)
  154.         except IOError:
  155.             filename is None
  156.             filename is None
  157.             return None
  158.  
  159.         st = parser.suite(fp.read())
  160.         fp.close()
  161.         funcdef = symbol.funcdef
  162.         lambdef = symbol.lambdef
  163.         stack = [
  164.             st.totuple(1)]
  165.         while stack:
  166.             tree = stack.pop()
  167.             
  168.             try:
  169.                 sym = tree[0]
  170.             except (IndexError, TypeError):
  171.                 filename is None
  172.                 filename is None
  173.                 continue
  174.             except:
  175.                 filename is None
  176.  
  177.             if sym == funcdef:
  178.                 self._funcmap[(fileno, tree[2][2])] = (filename, tree[2][1])
  179.             elif sym == lambdef:
  180.                 self._funcmap[(fileno, tree[1][2])] = (filename, '<lambda>')
  181.             
  182.             stack.extend(list(tree[1:]))
  183.  
  184.  
  185.