summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/floatobject.c35
-rw-r--r--Objects/longobject.c54
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 */