python-2.5.2/win32/Lib/compiler/misc.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 
       
     2 def flatten(tup):
       
     3     elts = []
       
     4     for elt in tup:
       
     5         if isinstance(elt, tuple):
       
     6             elts = elts + flatten(elt)
       
     7         else:
       
     8             elts.append(elt)
       
     9     return elts
       
    10 
       
    11 class Set:
       
    12     def __init__(self):
       
    13         self.elts = {}
       
    14     def __len__(self):
       
    15         return len(self.elts)
       
    16     def __contains__(self, elt):
       
    17         return self.elts.has_key(elt)
       
    18     def add(self, elt):
       
    19         self.elts[elt] = elt
       
    20     def elements(self):
       
    21         return self.elts.keys()
       
    22     def has_elt(self, elt):
       
    23         return self.elts.has_key(elt)
       
    24     def remove(self, elt):
       
    25         del self.elts[elt]
       
    26     def copy(self):
       
    27         c = Set()
       
    28         c.elts.update(self.elts)
       
    29         return c
       
    30 
       
    31 class Stack:
       
    32     def __init__(self):
       
    33         self.stack = []
       
    34         self.pop = self.stack.pop
       
    35     def __len__(self):
       
    36         return len(self.stack)
       
    37     def push(self, elt):
       
    38         self.stack.append(elt)
       
    39     def top(self):
       
    40         return self.stack[-1]
       
    41     def __getitem__(self, index): # needed by visitContinue()
       
    42         return self.stack[index]
       
    43 
       
    44 MANGLE_LEN = 256 # magic constant from compile.c
       
    45 
       
    46 def mangle(name, klass):
       
    47     if not name.startswith('__'):
       
    48         return name
       
    49     if len(name) + 2 >= MANGLE_LEN:
       
    50         return name
       
    51     if name.endswith('__'):
       
    52         return name
       
    53     try:
       
    54         i = 0
       
    55         while klass[i] == '_':
       
    56             i = i + 1
       
    57     except IndexError:
       
    58         return name
       
    59     klass = klass[i:]
       
    60 
       
    61     tlen = len(klass) + len(name)
       
    62     if tlen > MANGLE_LEN:
       
    63         klass = klass[:MANGLE_LEN-tlen]
       
    64 
       
    65     return "_%s%s" % (klass, name)
       
    66 
       
    67 def set_filename(filename, tree):
       
    68     """Set the filename attribute to filename on every node in tree"""
       
    69     worklist = [tree]
       
    70     while worklist:
       
    71         node = worklist.pop(0)
       
    72         node.filename = filename
       
    73         worklist.extend(node.getChildNodes())