[Patches] [ python-Patches-1600346 ] __bool__ instead of __nonzero__

SourceForge.net noreply at sourceforge.net
Wed Nov 22 21:07:58 CET 2006


Patches item #1600346, was opened at 2006-11-21 13:57
Message generated for change (Comment added) made by gangesmaster
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1600346&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Core (C code)
Group: Python 3000
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: ganges master (gangesmaster)
Assigned to: Nobody/Anonymous (nobody)
Summary: __bool__ instead of __nonzero__

Initial Comment:
this patch replaces __nonzero__ with __bool__, to make bool type symmetrical to all other types (__int__, __float__, etc.)

some notes:
* the latex docs have been updated
* the slot name was changed from nb_nonzero to nb_bool
* all XXX_nonzero methods where changed to XXX_bool
* all the comments relating to nb_nonzero have been updated
* stdlib was updated
* all the test suites were updated

otoh, i couldn't get it to compile (MSVC++2003), because of a strange bug in ceval.c (none of my code). seems the GETLOCAL macro causes syntactic problems, but i didn't have time to check it thoroughly.

----------------------------------------------------------------------

>Comment By: ganges master (gangesmaster)
Date: 2006-11-22 22:07

Message:
Logged In: YES 
user_id=1406776
Originator: YES

> There used to be a "result = -1;"
result is initialized to -1 at the beginning of the function

> did you mean to reindent the long_as_number struct in longobject.c?
i realigned the struct with tab of 4, where it used to be tabs of 8,
so things got messed up a little. i tried my best to fix it, but 
i can't fix what i can't see :)

> bool5.patch removes the check for int for the __len__() result as this
is
> already done in the __len__() call itself
no it's not! we are not using PyObject_Len, we directly invoke __len__, 
which may return anything it wishes. you can't skip that check.



----------------------------------------------------------------------

Comment By: Jack Diederich (jackdied)
Date: 2006-11-22 21:58

Message:
Logged In: YES 
user_id=591932
Originator: NO

I'm not convinced slot_nb_bool is doing the right thing in 
the PyBool_Check(tmp) line.  There used to be a "result = -1;"
right after the PyErr_Format and there isn't anymore (maybe
result gets set to -1 somewhere else but I can't tell where).

Can you undo the refactoring of that function in general?
Some of the decrefs moved around too and they look correct
but it would be easier to tell if they just stayed the same.

Also, did you mean to reindent the long_as_number struct
in longobject.c?


----------------------------------------------------------------------

Comment By: Walter Dörwald (doerwalter)
Date: 2006-11-22 20:55

Message:
Logged In: YES 
user_id=89016
Originator: NO

bool5.patch removes the check for int for the __len__() result as this is
already done in the __len__() call itself. It adds a few tests to
test_bool.py::BoolTest.test_convert_to_bool() and fixes the description of
__bool__ in Doc/ref/ref3.tex.

----------------------------------------------------------------------

Comment By: ganges master (gangesmaster)
Date: 2006-11-21 23:33

Message:
Logged In: YES 
user_id=1406776
Originator: YES

fixed a bug with type checking when using __len__

----------------------------------------------------------------------

Comment By: ganges master (gangesmaster)
Date: 2006-11-21 20:28

Message:
Logged In: YES 
user_id=1406776
Originator: YES

* slot_nb_bool now requires __bool__ to return only a boolean
* tab-width issues (hopefully) fixed

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1600346&group_id=5470


More information about the Patches mailing list