diff options
-rw-r--r-- | Objects/floatobject.c | 35 | ||||
-rw-r--r-- | Objects/longobject.c | 54 |
2 files changed, 54 insertions, 35 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index f2f53ba..bf65541 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -742,17 +742,6 @@ float_neg(PyFloatObject *v) } static PyObject * -float_pos(PyFloatObject *v) -{ - if (PyFloat_CheckExact(v)) { - Py_INCREF(v); - return (PyObject *)v; - } - else - return PyFloat_FromDouble(v->ob_fval); -} - -static PyObject * float_abs(PyFloatObject *v) { return PyFloat_FromDouble(fabs(v->ob_fval)); @@ -989,7 +978,15 @@ PyDoc_STRVAR(float_setformat_doc, "Overrides the automatic determination of C-level floating point type.\n" "This affects how floats are converted to and from binary strings."); +static PyObject * +float_getzero(PyObject *v, void *closure) +{ + return PyFloat_FromDouble(0.0); +} + static PyMethodDef float_methods[] = { + {"conjugate", (PyCFunction)float_float, METH_NOARGS, + "Returns self, the complex conjugate of any float."}, {"__getnewargs__", (PyCFunction)float_getnewargs, METH_NOARGS}, {"__getformat__", (PyCFunction)float_getformat, METH_O|METH_CLASS, float_getformat_doc}, @@ -998,6 +995,18 @@ static PyMethodDef float_methods[] = { {NULL, NULL} /* sentinel */ }; +static PyGetSetDef float_getset[] = { + {"real", + (getter)float_float, (setter)NULL, + "the real part of a complex number", + NULL}, + {"imag", + (getter)float_getzero, (setter)NULL, + "the imaginary part of a complex number", + NULL}, + {NULL} /* Sentinel */ +}; + PyDoc_STRVAR(float_doc, "float(x) -> floating point number\n\ \n\ @@ -1012,7 +1021,7 @@ static PyNumberMethods float_as_number = { float_divmod, /*nb_divmod*/ float_pow, /*nb_power*/ (unaryfunc)float_neg, /*nb_negative*/ - (unaryfunc)float_pos, /*nb_positive*/ + (unaryfunc)float_float, /*nb_positive*/ (unaryfunc)float_abs, /*nb_absolute*/ (inquiry)float_bool, /*nb_bool*/ 0, /*nb_invert*/ @@ -1073,7 +1082,7 @@ PyTypeObject PyFloat_Type = { 0, /* tp_iternext */ float_methods, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + float_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ diff --git a/Objects/longobject.c b/Objects/longobject.c index 930d07e..3659225 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -1985,7 +1985,7 @@ PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base) /* forward */ static PyLongObject *x_divrem (PyLongObject *, PyLongObject *, PyLongObject **); -static PyObject *long_pos(PyLongObject *); +static PyObject *long_long(PyObject *v); static int long_divrem(PyLongObject *, PyLongObject *, PyLongObject **, PyLongObject **); @@ -3181,17 +3181,6 @@ long_invert(PyLongObject *v) } static PyObject * -long_pos(PyLongObject *v) -{ - if (PyLong_CheckExact(v)) { - Py_INCREF(v); - return (PyObject *)v; - } - else - return _PyLong_Copy(v); -} - -static PyObject * long_neg(PyLongObject *v) { PyLongObject *z; @@ -3209,7 +3198,7 @@ long_abs(PyLongObject *v) if (Py_Size(v) < 0) return long_neg(v); else - return long_pos(v); + return long_long((PyObject *)v); } static int @@ -3496,12 +3485,6 @@ long_long(PyObject *v) } static PyObject * -long_int(PyObject *v) -{ - return long_long(v); -} - -static PyObject * long_float(PyObject *v) { double result; @@ -3607,11 +3590,38 @@ long_getnewargs(PyLongObject *v) return Py_BuildValue("(N)", _PyLong_Copy(v)); } +static PyObject * +long_getN(PyLongObject *v, void *context) { + return PyLong_FromLong((intptr_t)context); +} + static PyMethodDef long_methods[] = { + {"conjugate", (PyCFunction)long_long, METH_NOARGS, + "Returns self, the complex conjugate of any int."}, {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; +static PyGetSetDef long_getset[] = { + {"real", + (getter)long_long, (setter)NULL, + "the real part of a complex number", + NULL}, + {"imag", + (getter)long_getN, (setter)NULL, + "the imaginary part of a complex number", + (void*)0}, + {"numerator", + (getter)long_long, (setter)NULL, + "the numerator of a rational number in lowest terms", + NULL}, + {"denominator", + (getter)long_getN, (setter)NULL, + "the denominator of a rational number in lowest terms", + (void*)1}, + {NULL} /* Sentinel */ +}; + PyDoc_STRVAR(long_doc, "int(x[, base]) -> integer\n\ \n\ @@ -3629,7 +3639,7 @@ static PyNumberMethods long_as_number = { long_divmod, /*nb_divmod*/ long_pow, /*nb_power*/ (unaryfunc) long_neg, /*nb_negative*/ - (unaryfunc) long_pos, /*tp_positive*/ + (unaryfunc) long_long, /*tp_positive*/ (unaryfunc) long_abs, /*tp_absolute*/ (inquiry) long_bool, /*tp_bool*/ (unaryfunc) long_invert, /*nb_invert*/ @@ -3639,7 +3649,7 @@ static PyNumberMethods long_as_number = { long_xor, /*nb_xor*/ long_or, /*nb_or*/ 0, /*nb_coerce*/ - long_int, /*nb_int*/ + long_long, /*nb_int*/ long_long, /*nb_long*/ long_float, /*nb_float*/ 0, /*nb_oct*/ /* not used */ @@ -3694,7 +3704,7 @@ PyTypeObject PyLong_Type = { 0, /* tp_iternext */ long_methods, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + long_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ |