diff options
-rw-r--r-- | Lib/test/test_builtin.py | 4 | ||||
-rw-r--r-- | Lib/test/test_py3kwarn.py | 14 | ||||
-rw-r--r-- | Python/bltinmodule.c | 42 |
3 files changed, 15 insertions, 45 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 4264a99..15d80a3 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -632,10 +632,6 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(hex(-16L), '-0x10L') self.assertRaises(TypeError, hex, {}) - class Spam(object): - def __index__(self): return 23 - self.assertEqual(hex(Spam()), "0x17") - def test_id(self): id(None) id(1) diff --git a/Lib/test/test_py3kwarn.py b/Lib/test/test_py3kwarn.py index 07d5b34..2c8f509 100644 --- a/Lib/test/test_py3kwarn.py +++ b/Lib/test/test_py3kwarn.py @@ -123,20 +123,6 @@ class TestPy3KWarnings(unittest.TestCase): with catch_warning() as w: self.assertWarning(buffer('a'), w, expected) - def test_hex_and_oct(self): - class Spam(object): - def __hex__(self): return "0x17" - def __oct__(self): return "07" - - expected = 'In 3.x, oct() converts the result of __index__ to octal; ' \ - 'Use future_builtins.oct for this behavior. ' \ - 'Also, note the returned format is different.' - with catch_warning() as w: - self.assertWarning(oct(Spam()), w, expected) - expected = 'In 3.x, hex() converts the result of __index__ to hexadecimal.' - with catch_warning() as w: - self.assertWarning(hex(Spam()), w, expected) - class TestStdlibRemovals(unittest.TestCase): diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 45f4081..0234b6b 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1181,29 +1181,22 @@ builtin_hex(PyObject *self, PyObject *v) { PyNumberMethods *nb; PyObject *res; - - nb = Py_TYPE(v)->tp_as_number; - - if (nb != NULL && nb->nb_hex != NULL) { - if (PyErr_WarnPy3k("In 3.x, hex() converts " - "the result of __index__ to hexadecimal.", - 1) < 0) - return NULL; - res = (*nb->nb_hex)(v); - if (res && !PyString_Check(res)) { - PyErr_Format(PyExc_TypeError, - "__hex__ returned non-string (type %.200s)", - res->ob_type->tp_name); - Py_DECREF(res); - return NULL; - } - return res; + + if ((nb = v->ob_type->tp_as_number) == NULL || + nb->nb_hex == NULL) { + PyErr_SetString(PyExc_TypeError, + "hex() argument can't be converted to hex"); + return NULL; } - else if (PyIndex_Check(v)) - return PyNumber_ToBase(v, 16); - PyErr_SetString(PyExc_TypeError, - "hex() argument can't be converted to hex"); - return NULL; + res = (*nb->nb_hex)(v); + if (res && !PyString_Check(res)) { + PyErr_Format(PyExc_TypeError, + "__hex__ returned non-string (type %.200s)", + res->ob_type->tp_name); + Py_DECREF(res); + return NULL; + } + return res; } PyDoc_STRVAR(hex_doc, @@ -1463,11 +1456,6 @@ builtin_oct(PyObject *self, PyObject *v) "oct() argument can't be converted to oct"); return NULL; } - if (PyErr_WarnPy3k("In 3.x, oct() converts the result of __index__ to octal; " - "Use future_builtins.oct for this behavior. " - "Also, note the returned format is different.", - 1) < 0) - return NULL; res = (*nb->nb_oct)(v); if (res && !PyString_Check(res)) { PyErr_Format(PyExc_TypeError, |