mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	 213c7a6aa5
			
		
	
	
		213c7a6aa5
		
	
	
	
	
		
			
			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.
		
			
				
	
	
		
			13 lines
		
	
	
	
		
			404 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			13 lines
		
	
	
	
		
			404 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Iterators (the basic kind, over a sequence) */
 | |
| 
 | |
| extern DL_IMPORT(PyTypeObject) PySeqIter_Type;
 | |
| 
 | |
| #define PySeqIter_Check(op) ((op)->ob_type == &PySeqIter_Type)
 | |
| 
 | |
| extern DL_IMPORT(PyObject *) PySeqIter_New(PyObject *);
 | |
| 
 | |
| extern DL_IMPORT(PyTypeObject) PyCallIter_Type;
 | |
| 
 | |
| #define PyCallIter_Check(op) ((op)->ob_type == &PyCallIter_Type)
 | |
| 
 | |
| extern DL_IMPORT(PyObject *) PyCallIter_New(PyObject *, PyObject *);
 |