[Python-checkins] CVS: python/dist/src/Include abstract.h,2.32,2.33
Tim Peters
tim_one@users.sourceforge.net
Fri, 04 May 2001 20:56:39 -0700
Update of /cvsroot/python/python/dist/src/Include
In directory usw-pr-cvs1:/tmp/cvs-serv17966/python/dist/src/Include
Modified Files:
abstract.h
Log Message:
Generalize tuple() to work nicely with iterators.
NEEDS DOC CHANGES.
This one surprised me! While I expected tuple() to be a no-brainer, turns
out it's actually dripping with consequences:
1. It will *allow* the popular PySequence_Fast() to work with any iterable
object (code for that not yet checked in, but should be trivial).
2. It caused two std tests to fail. This because some places used
PyTuple_Sequence() (the C spelling of tuple()) as an indirect way to test
whether something *is* a sequence. But tuple() code only looked for the
existence of sq->item to determine that, and e.g. an instance passed
that test whether or not it supported the other operations tuple()
needed (e.g., __len__). So some things the tests *expected* to fail
with an AttributeError now fail with a TypeError instead. This looks
like an improvement to me; e.g., test_coercion used to produce 559
TypeErrors and 2 AttributeErrors, and now they're all TypeErrors. The
error details are more informative too, because the places calling this
were *looking* for TypeErrors in order to replace the generic tuple()
"not a sequence" msg with their own more specific text, and
AttributeErrors snuck by that.
Index: abstract.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/abstract.h,v
retrieving revision 2.32
retrieving revision 2.33
diff -C2 -r2.32 -r2.33
*** abstract.h 2001/05/05 00:14:56 2.32
--- abstract.h 2001/05/05 03:56:37 2.33
***************
*** 912,916 ****
members of this list.
! Returns NULL on failure. If the object is not a sequence,
raises a TypeError exception with m as the message text.
*/
--- 912,916 ----
members of this list.
! Returns NULL on failure. If the object does not support iteration,
raises a TypeError exception with m as the message text.
*/