diff options
author | Eric Smith <eric@trueblade.com> | 2008-02-10 01:36:53 (GMT) |
---|---|---|
committer | Eric Smith <eric@trueblade.com> | 2008-02-10 01:36:53 (GMT) |
commit | 5e527ebee1580f052fc53aacabe3906ffcdd4805 (patch) | |
tree | b77c8ca7e6fcd8a2cd31c184c764a79633e2fb85 /Objects/abstract.c | |
parent | 14a1b8cc469375577ea42152bfe559fa52d6ece7 (diff) | |
download | cpython-5e527ebee1580f052fc53aacabe3906ffcdd4805.zip cpython-5e527ebee1580f052fc53aacabe3906ffcdd4805.tar.gz cpython-5e527ebee1580f052fc53aacabe3906ffcdd4805.tar.bz2 |
Added PyNumber_ToBase and supporting routines _PyInt_Format and
_PyLong_Format. In longobject.c, changed long_format to
_PyLong_Format. In intobject.c, changed uses of PyOS_snprintf to
_PyInt_Format instead.
_PyLong_Format is similar to py3k's routine of the same name, except
it has 2 additional parameters: addL and newstyle. addL was existing
in long_format, and controls adding the trailing "L". This is
unneeded in py3k. newstyle is used to control whether octal prepends
"0" (the pre-2.6 style), or "0o" (the 3.0 sytle).
PyNumber_ToBase is needed for PEP 3127 (Integer Literal Support and
Syntax) and PEP 3101 (Advanced String Formatting).
This changeset does not need merging into py3k.
Diffstat (limited to 'Objects/abstract.c')
-rw-r--r-- | Objects/abstract.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index a3e159a..89a78c6 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1262,6 +1262,25 @@ PyNumber_Float(PyObject *o) return PyFloat_FromString(o, NULL); } +PyObject * +PyNumber_ToBase(PyObject *n, int base) +{ + PyObject *res = NULL; + PyObject *index = PyNumber_Index(n); + + if (!index) + return NULL; + if (PyLong_Check(index)) + res = _PyLong_Format(index, base, 0, 1); + else if (PyInt_Check(index)) + res = _PyInt_Format((PyIntObject*)index, base, 1); + else + assert("PyNumber_ToBase: not long or int"); + Py_DECREF(index); + return res; +} + + /* Operations on sequences */ int |