summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2008-06-24 22:46:07 (GMT)
committerRaymond Hettinger <python@rcn.com>2008-06-24 22:46:07 (GMT)
commit9c437af4ebd832d913b85bfb2e666d55565c3665 (patch)
tree993ca8e99a212478a985cdeec1f92892016ce2da
parent4ac817213bdc9fabd6522754ef6088bac02e74ce (diff)
downloadcpython-9c437af4ebd832d913b85bfb2e666d55565c3665.zip
cpython-9c437af4ebd832d913b85bfb2e666d55565c3665.tar.gz
cpython-9c437af4ebd832d913b85bfb2e666d55565c3665.tar.bz2
Revert 64424, 64438, and 64439.
-rw-r--r--Include/object.h3
-rw-r--r--Lib/test/test_builtin.py27
-rw-r--r--Lib/test/test_sys.py2
-rw-r--r--Misc/NEWS6
-rw-r--r--Objects/floatobject.c72
-rw-r--r--Objects/intobject.c7
-rw-r--r--Objects/longobject.c7
-rw-r--r--Objects/typeobject.c4
-rw-r--r--Python/bltinmodule.c19
9 files changed, 9 insertions, 138 deletions
diff --git a/Include/object.h b/Include/object.h
index 709174f..59f3b9e 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -267,9 +267,6 @@ typedef struct {
/* Added in release 2.5 */
unaryfunc nb_index;
-
- /* Added in release 2.6 */
- unaryfunc nb_bin;
} PyNumberMethods;
typedef struct {
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 8c46ab8..15d80a3 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -631,15 +631,6 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(hex(-16), '-0x10')
self.assertEqual(hex(-16L), '-0x10L')
self.assertRaises(TypeError, hex, {})
- self.assertEqual(hex(3.125), '0x19 * 2.0 ** -3')
- self.assertEqual(hex(0.0), '0x0 * 2.0 ** 0')
- for sv in float('nan'), float('inf'), float('-inf'):
- self.assertEqual(hex(sv), repr(sv))
- for i in range(100):
- x = random.expovariate(.05)
- self.assertEqual(eval(hex(x)), x, (x, hex(x), eval(hex(x))))
- self.assertEqual(eval(hex(-x)), -x)
- self.assertEqual(hex(-x), ('-' + hex(x)))
def test_id(self):
id(None)
@@ -923,15 +914,6 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(oct(-100), '-0144')
self.assertEqual(oct(-100L), '-0144L')
self.assertRaises(TypeError, oct, ())
- self.assertEqual(oct(3.125), '031 * 2.0 ** -3')
- self.assertEqual(oct(0.0), '0 * 2.0 ** 0')
- for sv in float('nan'), float('inf'), float('-inf'):
- self.assertEqual(oct(sv), repr(sv))
- for i in range(100):
- x = random.expovariate(.05)
- self.assertEqual(eval(oct(x)), x)
- self.assertEqual(eval(oct(-x)), -x)
- self.assertEqual(oct(-x), ('-' + oct(x)))
def write_testfile(self):
# NB the first 4 lines are also used to test input and raw_input, below
@@ -1484,15 +1466,6 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
- self.assertEqual(bin(3.125), '0b11001 * 2.0 ** -3')
- self.assertEqual(bin(0.0), '0b0 * 2.0 ** 0')
- for sv in float('nan'), float('inf'), float('-inf'):
- self.assertEqual(bin(sv), repr(sv))
- for i in range(100):
- x = random.expovariate(.05)
- self.assertEqual(eval(bin(x)), x)
- self.assertEqual(eval(bin(-x)), -x)
- self.assertEqual(bin(-x), ('-' + bin(x)))
class TestSorted(unittest.TestCase):
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index c98117a..f1fb615 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -523,7 +523,7 @@ class SizeofTest(unittest.TestCase):
len_typeobject = p + 2*l + 15*p + l + 4*p + l + 9*p +\
l + 11*p + self.align(4)
self.check_sizeof(class_newstyle,
- h + len_typeobject + 42*p + 10*p + 3*p + 6*p)
+ h + len_typeobject + 41*p + 10*p + 3*p + 6*p)
def test_specialtypes(self):
i = self.i
diff --git a/Misc/NEWS b/Misc/NEWS
index 022196f..e91b696 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,12 +17,6 @@ Core and Builtins
slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9,
10, -1).
-- Issue 3008: hex(), oct(), and bin() can now create exact reprs
- for floats.
-
-- Make bin() implementation parallel oct() and hex().
-
-
What's New in Python 2.6 beta 1?
================================
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index f8d1207..32e7cc8 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -405,11 +405,11 @@ PyFloat_AsStringEx(char *buf, PyFloatObject *v, int precision)
obj is not of float, int or long type, Py_NotImplemented is incref'ed,
stored in obj, and returned from the function invoking this macro.
*/
-#define CONVERT_TO_DOUBLE(obj, dbl) \
- if (PyFloat_Check(obj)) \
- dbl = PyFloat_AS_DOUBLE(obj); \
- else if (convert_to_double((PyObject **)&(obj), &(dbl)) < 0) \
- return (PyObject *)(obj);
+#define CONVERT_TO_DOUBLE(obj, dbl) \
+ if (PyFloat_Check(obj)) \
+ dbl = PyFloat_AS_DOUBLE(obj); \
+ else if (convert_to_double(&(obj), &(dbl)) < 0) \
+ return obj;
static int
convert_to_double(PyObject **v, double *dbl)
@@ -1204,62 +1204,6 @@ PyDoc_STRVAR(float_as_integer_ratio_doc,
">>> (-.25).as_integer_ratio()\n"
"(-1, 4)");
-static PyObject *
-_float_to_base(PyFloatObject *v, unaryfunc int_to_base)
-{
- PyObject *mant, *conv, *result;
- double x, fr;
- int i, exp, n;
- char *conv_str;
-
- CONVERT_TO_DOUBLE(v, x);
- if (!Py_IS_FINITE(x))
- return PyObject_Repr((PyObject *)v);
- fr = frexp(x, &exp);
- for (i=0; i<300 && fr != floor(fr) ; i++) {
- fr *= 2.0;
- exp--;
- }
- mant = PyLong_FromDouble(floor(fr));
- if (mant == NULL)
- return NULL;
- conv = int_to_base(mant);
- Py_DECREF(mant);
- if (conv== NULL)
- return NULL;
- n = PyString_GET_SIZE(conv);
- conv_str = PyString_AS_STRING(conv);
- /* Remove the trailing 'L' if present */
- if (n && conv_str[n-1] == 'L') {
- PyObject *newconv = PySequence_GetSlice(conv, 0, -1);
- Py_DECREF(conv);
- if (newconv == NULL)
- return NULL;
- conv = newconv;
- conv_str = PyString_AS_STRING(conv);
- }
- result = PyString_FromFormat("%s * 2.0 ** %d", conv_str, exp);
- Py_DECREF(conv);
- return result;
-}
-
-static PyObject *
-float_hex(PyFloatObject *v)
-{
- return _float_to_base(v, PyLong_Type.tp_as_number->nb_hex);
-}
-
-static PyObject *
-float_oct(PyFloatObject *v)
-{
- return _float_to_base(v, PyLong_Type.tp_as_number->nb_oct);
-}
-
-static PyObject *
-float_bin(PyFloatObject *v)
-{
- return _float_to_base(v, PyLong_Type.tp_as_number->nb_bin);
-}
static PyObject *
float_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -1546,8 +1490,8 @@ static PyNumberMethods float_as_number = {
float_trunc, /*nb_int*/
float_trunc, /*nb_long*/
float_float, /*nb_float*/
- (unaryfunc)float_oct, /* nb_oct */
- (unaryfunc)float_hex, /* nb_hex */
+ 0, /* nb_oct */
+ 0, /* nb_hex */
0, /* nb_inplace_add */
0, /* nb_inplace_subtract */
0, /* nb_inplace_multiply */
@@ -1563,8 +1507,6 @@ static PyNumberMethods float_as_number = {
float_div, /* nb_true_divide */
0, /* nb_inplace_floor_divide */
0, /* nb_inplace_true_divide */
- 0, /* nb_index */
- (unaryfunc)float_bin, /* nb_bin */
};
PyTypeObject PyFloat_Type = {
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 5210ee8..f98aee0 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -934,12 +934,6 @@ int_float(PyIntObject *v)
}
static PyObject *
-int_bin(PyObject *v)
-{
- return PyNumber_ToBase(v, 2);
-}
-
-static PyObject *
int_oct(PyIntObject *v)
{
return _PyInt_Format(v, 8, 0);
@@ -1237,7 +1231,6 @@ static PyNumberMethods int_as_number = {
0, /* nb_inplace_floor_divide */
0, /* nb_inplace_true_divide */
(unaryfunc)int_int, /* nb_index */
- (unaryfunc)int_bin, /* nb_bin */
};
PyTypeObject PyInt_Type = {
diff --git a/Objects/longobject.c b/Objects/longobject.c
index b603dda..c65d0c0 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3301,12 +3301,6 @@ long_float(PyObject *v)
}
static PyObject *
-long_bin(PyObject *v)
-{
- return PyNumber_ToBase(v, 2);
-}
-
-static PyObject *
long_oct(PyObject *v)
{
return _PyLong_Format(v, 8, 1, 0);
@@ -3546,7 +3540,6 @@ static PyNumberMethods long_as_number = {
0, /* nb_inplace_floor_divide */
0, /* nb_inplace_true_divide */
long_long, /* nb_index */
- long_bin, /* nb_bin */
};
PyTypeObject PyLong_Type = {
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 093fd20..e0ae55b 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3743,7 +3743,6 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
if (base->tp_flags & Py_TPFLAGS_HAVE_INDEX) {
COPYNUM(nb_index);
}
- COPYNUM(nb_hex);
}
if (type->tp_as_sequence != NULL && base->tp_as_sequence != NULL) {
@@ -5136,7 +5135,6 @@ slot_nb_coerce(PyObject **a, PyObject **b)
SLOT0(slot_nb_int, "__int__")
SLOT0(slot_nb_long, "__long__")
SLOT0(slot_nb_float, "__float__")
-SLOT0(slot_nb_bin, "__bin__")
SLOT0(slot_nb_oct, "__oct__")
SLOT0(slot_nb_hex, "__hex__")
SLOT1(slot_nb_inplace_add, "__iadd__", PyObject *, "O")
@@ -5804,8 +5802,6 @@ static slotdef slotdefs[] = {
"long(x)"),
UNSLOT("__float__", nb_float, slot_nb_float, wrap_unaryfunc,
"float(x)"),
- UNSLOT("__bin__", nb_bin, slot_nb_bin, wrap_unaryfunc,
- "bin(x)"),
UNSLOT("__oct__", nb_oct, slot_nb_oct, wrap_unaryfunc,
"oct(x)"),
UNSLOT("__hex__", nb_hex, slot_nb_hex, wrap_unaryfunc,
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 7647523..e18eb2a 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -211,24 +211,7 @@ Deprecated since release 2.3. Instead, use the extended call syntax:\n\
static PyObject *
builtin_bin(PyObject *self, PyObject *v)
{
- PyNumberMethods *nb;
- PyObject *res;
-
- if ((nb = v->ob_type->tp_as_number) == NULL ||
- nb->nb_hex == NULL) {
- PyErr_SetString(PyExc_TypeError,
- "bin() argument can't be converted to hex");
- return NULL;
- }
- res = (*nb->nb_bin)(v);
- if (res && !PyString_Check(res)) {
- PyErr_Format(PyExc_TypeError,
- "__bin__ returned non-string (type %.200s)",
- res->ob_type->tp_name);
- Py_DECREF(res);
- return NULL;
- }
- return res;
+ return PyNumber_ToBase(v, 2);
}
PyDoc_STRVAR(bin_doc,