Author: Ronan Lamy <ronan.l...@gmail.com> Branch: union-side-effects Changeset: r86847:033077287c06 Date: 2016-09-02 19:35 +0100 http://bitbucket.org/pypy/pypy/changeset/033077287c06/
Log: Create union() as a side-effect-free binary function to replace unionof() wherever possible diff --git a/rpython/annotator/model.py b/rpython/annotator/model.py --- a/rpython/annotator/model.py +++ b/rpython/annotator/model.py @@ -94,16 +94,9 @@ if self == other: return True try: - TLS.no_side_effects_in_union += 1 - except AttributeError: - TLS.no_side_effects_in_union = 1 - try: - try: - return pair(self, other).union() == self - except UnionError: - return False - finally: - TLS.no_side_effects_in_union -= 1 + return union(self, other) == self + except UnionError: + return False def is_constant(self): d = self.__dict__ @@ -739,6 +732,23 @@ def __repr__(self): return str(self) +def union(s1, s2): + """The join operation in the lattice of annotations. + + It is the most precise SomeObject instance that contains both arguments. + + union() is (supposed to be) idempotent, commutative, associative and has + no side-effects. + """ + try: + TLS.no_side_effects_in_union += 1 + except AttributeError: + TLS.no_side_effects_in_union = 1 + try: + return pair(s1, s2).union() + finally: + TLS.no_side_effects_in_union -= 1 + def unionof(*somevalues): "The most precise SomeValue instance that contains all the values." try: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit