]> granicus.if.org Git - python/commit
Mondo changes to the iterator stuff, without changing how Python code
authorGuido van Rossum <guido@python.org>
Mon, 23 Apr 2001 14:08:49 +0000 (14:08 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 23 Apr 2001 14:08:49 +0000 (14:08 +0000)
commit213c7a6aa5889f42495352199715a1c1a0833a00
tree7559cd072f732c861cb28adb7192561a877fd6fb
parent8b3d6ca3df1097752a1091b2c8f6d7de1b36a81d
Mondo changes to the iterator stuff, without changing how Python code
sees it (test_iter.py is unchanged).

- Added a tp_iternext slot, which calls the iterator's next() method;
  this is much faster for built-in iterators over built-in types
  such as lists and dicts, speeding up pybench's ForLoop with about
  25% compared to Python 2.1.  (Now there's a good argument for
  iterators. ;-)

- Renamed the built-in sequence iterator SeqIter, affecting the C API
  functions for it.  (This frees up the PyIter prefix for generic
  iterator operations.)

- Added PyIter_Check(obj), which checks that obj's type has a
  tp_iternext slot and that the proper feature flag is set.

- Added PyIter_Next(obj) which calls the tp_iternext slot.  It has a
  somewhat complex return condition due to the need for speed: when it
  returns NULL, it may not have set an exception condition, meaning
  the iterator is exhausted; when the exception StopIteration is set
  (or a derived exception class), it means the same thing; any other
  exception means some other error occurred.
Include/abstract.h
Include/iterobject.h
Include/object.h
Objects/abstract.c
Objects/classobject.c
Objects/dictobject.c
Objects/fileobject.c
Objects/iterobject.c
Python/ceval.c