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