diff options
author | Guido van Rossum <guido@python.org> | 1992-08-14 12:06:52 +0000 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-08-14 12:06:52 +0000 |
commit | 13735506e382f74b6d701ce8b61fd70a5a9cd249 (patch) | |
tree | 2896ab6358835d67083251ca911ff6d29a1138bf /Objects/floatobject.c | |
parent | 4920959b980368503cc74de9c59cce864b83b897 (diff) | |
download | cpython-13735506e382f74b6d701ce8b61fd70a5a9cd249.tar.gz |
* 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.
Diffstat (limited to 'Objects/floatobject.c')
-rw-r--r-- | Objects/floatobject.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index d154cab1c0..5ce620220a 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -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 = { |