+++ /dev/null
-\r
-def flatten(tup):\r
- elts = []\r
- for elt in tup:\r
- if isinstance(elt, tuple):\r
- elts = elts + flatten(elt)\r
- else:\r
- elts.append(elt)\r
- return elts\r
-\r
-class Set:\r
- def __init__(self):\r
- self.elts = {}\r
- def __len__(self):\r
- return len(self.elts)\r
- def __contains__(self, elt):\r
- return elt in self.elts\r
- def add(self, elt):\r
- self.elts[elt] = elt\r
- def elements(self):\r
- return self.elts.keys()\r
- def has_elt(self, elt):\r
- return elt in self.elts\r
- def remove(self, elt):\r
- del self.elts[elt]\r
- def copy(self):\r
- c = Set()\r
- c.elts.update(self.elts)\r
- return c\r
-\r
-class Stack:\r
- def __init__(self):\r
- self.stack = []\r
- self.pop = self.stack.pop\r
- def __len__(self):\r
- return len(self.stack)\r
- def push(self, elt):\r
- self.stack.append(elt)\r
- def top(self):\r
- return self.stack[-1]\r
- def __getitem__(self, index): # needed by visitContinue()\r
- return self.stack[index]\r
-\r
-MANGLE_LEN = 256 # magic constant from compile.c\r
-\r
-def mangle(name, klass):\r
- if not name.startswith('__'):\r
- return name\r
- if len(name) + 2 >= MANGLE_LEN:\r
- return name\r
- if name.endswith('__'):\r
- return name\r
- try:\r
- i = 0\r
- while klass[i] == '_':\r
- i = i + 1\r
- except IndexError:\r
- return name\r
- klass = klass[i:]\r
-\r
- tlen = len(klass) + len(name)\r
- if tlen > MANGLE_LEN:\r
- klass = klass[:MANGLE_LEN-tlen]\r
-\r
- return "_%s%s" % (klass, name)\r
-\r
-def set_filename(filename, tree):\r
- """Set the filename attribute to filename on every node in tree"""\r
- worklist = [tree]\r
- while worklist:\r
- node = worklist.pop(0)\r
- node.filename = filename\r
- worklist.extend(node.getChildNodes())\r