Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r69886:2ab068f12ff3 Date: 2014-03-12 08:23 +0100 http://bitbucket.org/pypy/pypy/changeset/2ab068f12ff3/
Log: Fix shown by test_streamio diff --git a/rpython/rtyper/rtuple.py b/rpython/rtyper/rtuple.py --- a/rpython/rtyper/rtuple.py +++ b/rpython/rtyper/rtuple.py @@ -290,14 +290,15 @@ if not s_tup.is_constant(): raise TyperError("contains() on non-const tuple") t = s_tup.const - if len(t) == 0: - hop.exception_cannot_occur() - return hop.inputconst(Bool, False) + s_item = hop.args_s[1] r_item = hop.args_r[1] v_arg = hop.inputarg(r_item, arg=1) ll_eq = r_item.get_ll_eq_function() or _ll_equal v_result = None for x in t: + s_const_item = hop.rtyper.annotator.bookkeeper.immutablevalue(x) + if not s_item.contains(s_const_item): + continue # corner case, see test_constant_tuple_contains_bug c_tuple_item = hop.inputconst(r_item, x) v_equal = hop.gendirectcall(ll_eq, v_arg, c_tuple_item) if v_result is None: diff --git a/rpython/rtyper/test/test_rtuple.py b/rpython/rtyper/test/test_rtuple.py --- a/rpython/rtyper/test/test_rtuple.py +++ b/rpython/rtyper/test/test_rtuple.py @@ -95,6 +95,14 @@ res = self.interpret(f, [50]) assert res is False + def test_constant_tuple_contains_bug(self): + def f(i): + return chr(i) in ('1', '2', '34') # the '34' can never match + res = self.interpret(f, [ord('1')]) + assert res is True + res = self.interpret(f, [ord('3')]) + assert res is False + def test_conv(self): def t0(): return (3, 2, None) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit