mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
* classobject.[ch], {float,long,int}object.c, bltinmodule.c:
coercion is now completely generic. * ceval.c: for instances, don't coerce for + and *; * reverses arguments if left one is non-instance numeric and right one sequence.
This commit is contained in:
parent
70d7a310a9
commit
e6eefc2231
7 changed files with 123 additions and 93 deletions
|
@ -299,6 +299,25 @@ float_nonzero(v)
|
|||
return v->ob_fval != 0.0;
|
||||
}
|
||||
|
||||
int
|
||||
float_coerce(pv, pw)
|
||||
object **pv;
|
||||
object **pw;
|
||||
{
|
||||
if (is_intobject(*pw)) {
|
||||
long x = getintvalue(*pw);
|
||||
*pw = newfloatobject((double)x);
|
||||
INCREF(*pv);
|
||||
return 0;
|
||||
}
|
||||
else if (is_longobject(*pw)) {
|
||||
*pw = newfloatobject(dgetlongvalue(*pw));
|
||||
INCREF(*pv);
|
||||
return 0;
|
||||
}
|
||||
return 1; /* Can't do it */
|
||||
}
|
||||
|
||||
static number_methods float_as_number = {
|
||||
float_add, /*nb_add*/
|
||||
float_sub, /*nb_subtract*/
|
||||
|
@ -317,6 +336,7 @@ static number_methods float_as_number = {
|
|||
0, /*nb_and*/
|
||||
0, /*nb_xor*/
|
||||
0, /*nb_or*/
|
||||
float_coerce, /*nb_coerce*/
|
||||
};
|
||||
|
||||
typeobject Floattype = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue