Author: Alex Gaynor <alex.gay...@gmail.com> Branch: Changeset: r56731:7a48df4c2691 Date: 2012-08-15 21:07 -0400 http://bitbucket.org/pypy/pypy/changeset/7a48df4c2691/
Log: Make __builtin__.next RPython diff --git a/pypy/annotation/test/test_annrpython.py b/pypy/annotation/test/test_annrpython.py --- a/pypy/annotation/test/test_annrpython.py +++ b/pypy/annotation/test/test_annrpython.py @@ -3829,7 +3829,7 @@ def next(self): return 1 - + def fn(): s = 0 for x in A(): @@ -3841,6 +3841,16 @@ assert len(a.translator.graphs) == 3 # fn, __iter__, next assert isinstance(s, annmodel.SomeInteger) + def test_next_function(self): + def fn(n): + x = [0, 1, n] + i = iter(x) + return next(i) + next(i) + + a = self.RPythonAnnotator() + s = a.build_types(fn, [int]) + assert isinstance(s, annmodel.SomeInteger) + def test_no_attr_on_common_exception_classes(self): for cls in [ValueError, Exception]: def fn(): diff --git a/pypy/objspace/flow/operation.py b/pypy/objspace/flow/operation.py --- a/pypy/objspace/flow/operation.py +++ b/pypy/objspace/flow/operation.py @@ -236,6 +236,7 @@ name = line[0] if hasattr(operator, name): Table.append((name, getattr(operator, name))) + Table.append(('next', __builtin__.next)) # build the dictionaries for name, func in Table: if name not in FunctionByName: diff --git a/pypy/rpython/test/test_rbuiltin.py b/pypy/rpython/test/test_rbuiltin.py --- a/pypy/rpython/test/test_rbuiltin.py +++ b/pypy/rpython/test/test_rbuiltin.py @@ -540,6 +540,26 @@ res = self.interpret(llfn, [0x12345678]) assert res == 0x5678 + def test_builtin_next(self): + def f(n): + x = [1, n, 2] + s = iter(x) + return next(s) + next(s) + res = self.interpret(f, [10]) + assert res == 11 + + def test_builtin_next_stop_iteration(self): + def f(n): + x = [n] + s = iter(x) + try: + return next(s) + next(s) + except StopIteration: + return n + 500 + + res = self.interpret(f, [12]) + assert res == 512 + class TestLLtype(BaseTestRbuiltin, LLRtypeMixin): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit