def create_slot(w_self, slot_name): space = w_self.space if not valid_slot_name(slot_name): raise oefmt(space.w_TypeError, "__slots__ must be identifiers") # create member slot_name = mangle(slot_name, w_self.name) if slot_name not in w_self.dict_w: # Force interning of slot names. slot_name = space.str_w(space.new_interned_str(slot_name)) # in cpython it is ignored less, but we probably don't care member = Member(w_self.nslots, slot_name, w_self) w_self.dict_w[slot_name] = space.wrap(member) w_self.nslots += 1
def mangle(self, name): return misc.mangle(name, self.name)
def test_mangle(): assert mangle("foo", "Bar") == "foo" assert mangle("__foo__", "Bar") == "__foo__" assert mangle("foo.baz", "Bar") == "foo.baz" assert mangle("__", "Bar") == "__" assert mangle("___", "Bar") == "___" assert mangle("____", "Bar") == "____" assert mangle("__foo", "Bar") == "_Bar__foo" assert mangle("__foo", "_Bar") == "_Bar__foo" assert mangle("__foo", "__Bar") == "_Bar__foo" assert mangle("__foo", "___") == "__foo" assert mangle("___foo", "__Bar") == "_Bar___foo"