diff --git a/vyper/utils.py b/vyper/utils.py index f4f14a346e..3f19a9d15c 100644 --- a/vyper/utils.py +++ b/vyper/utils.py @@ -25,9 +25,10 @@ class OrderedSet(Generic[_T]): """ def __init__(self, iterable=None): - self._data = dict() - if iterable is not None: - self.update(iterable) + if iterable is None: + self._data = dict() + else: + self._data = dict.fromkeys(iterable) def __repr__(self): keys = ", ".join(repr(k) for k in self) @@ -57,6 +58,7 @@ def pop(self): def add(self, item: _T) -> None: self._data[item] = None + # NOTE to refactor: duplicate of self.update() def addmany(self, iterable): for item in iterable: self._data[item] = None @@ -109,11 +111,11 @@ def intersection(cls, *sets): if len(sets) == 0: raise ValueError("undefined: intersection of no sets") - ret = sets[0].copy() - for e in sets[0]: - if any(e not in s for s in sets[1:]): - ret.remove(e) - return ret + tmp = sets[0]._data.keys() + for s in sets[1:]: + tmp &= s._data.keys() + + return cls(tmp) class StringEnum(enum.Enum):