this repo has no description
at trunk 68 lines 1.4 kB view raw
1# Portions copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2# pyre-unsafe 3 4 5class Set: 6 def __init__(self): 7 self.elts = {} 8 9 def __len__(self): 10 return len(self.elts) 11 12 def __contains__(self, elt): 13 return elt in self.elts 14 15 def add(self, elt): 16 self.elts[elt] = elt 17 18 def elements(self): 19 return self.elts.keys() 20 21 def has_elt(self, elt): 22 return elt in self.elts 23 24 def remove(self, elt): 25 del self.elts[elt] 26 27 def copy(self): 28 c = Set() 29 c.elts.update(self.elts) 30 return c 31 32 33class Stack(list): 34 def push(self, elt): 35 self.append(elt) 36 37 def top(self): 38 return self[-1] 39 40 41MANGLE_LEN = 256 # magic constant from compile.c 42 43 44def mangle(name, klass): 45 if klass is None: 46 return name 47 if not name.startswith("__"): 48 return name 49 if len(name) + 2 >= MANGLE_LEN: 50 return name 51 # TODO: Probably need to split and mangle recursively? 52 if "." in name: 53 return name 54 if name.endswith("__"): 55 return name 56 try: 57 i = 0 58 while klass[i] == "_": 59 i = i + 1 60 except IndexError: 61 return name 62 klass = klass[i:] 63 64 tlen = len(klass) + len(name) 65 if tlen > MANGLE_LEN: 66 klass = klass[: MANGLE_LEN - tlen] 67 68 return "_%s%s" % (klass, name)