mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Added future_builtins, which contains PEP 3127 compatible versions of hex() and oct().
This commit is contained in:
parent
73d7963242
commit
a73fbe791d
6 changed files with 113 additions and 0 deletions
27
Lib/test/test_future_builtins.py
Normal file
27
Lib/test/test_future_builtins.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
import test.test_support, unittest
|
||||||
|
|
||||||
|
# we're testing the behavior of these future builtins:
|
||||||
|
from future_builtins import hex, oct
|
||||||
|
|
||||||
|
class BuiltinTest(unittest.TestCase):
|
||||||
|
def test_hex(self):
|
||||||
|
self.assertEqual(hex(0), '0x0')
|
||||||
|
self.assertEqual(hex(16), '0x10')
|
||||||
|
self.assertEqual(hex(16L), '0x10')
|
||||||
|
self.assertEqual(hex(-16), '-0x10')
|
||||||
|
self.assertEqual(hex(-16L), '-0x10')
|
||||||
|
self.assertRaises(TypeError, hex, {})
|
||||||
|
|
||||||
|
def test_oct(self):
|
||||||
|
self.assertEqual(oct(0), '0o0')
|
||||||
|
self.assertEqual(oct(100), '0o144')
|
||||||
|
self.assertEqual(oct(100L), '0o144')
|
||||||
|
self.assertEqual(oct(-100), '-0o144')
|
||||||
|
self.assertEqual(oct(-100L), '-0o144')
|
||||||
|
self.assertRaises(TypeError, oct, ())
|
||||||
|
|
||||||
|
def test_main(verbose=None):
|
||||||
|
test.test_support.run_unittest(BuiltinTest)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_main(verbose=True)
|
|
@ -12,6 +12,14 @@ What's New in Python 2.6 alpha 1?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Added the future_builtins module, which contains hex() and oct().
|
||||||
|
These are the PEP 3127 version of these functions, designed to be
|
||||||
|
compatible with the hex() and oct() builtins from Python 3.0. They
|
||||||
|
differ slightly in their output formats from the existing, unchanged
|
||||||
|
Python 2.6 builtins. The expected usage of the future_builtins
|
||||||
|
module is:
|
||||||
|
from future_builtins import hex, oct
|
||||||
|
|
||||||
- Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit
|
- Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit
|
||||||
exponents for exponents with absolute value < 100. Follows C99
|
exponents for exponents with absolute value < 100. Follows C99
|
||||||
standard. This is a change on Windows, which would use 3 digits.
|
standard. This is a change on Windows, which would use 3 digits.
|
||||||
|
|
69
Modules/future_builtins.c
Normal file
69
Modules/future_builtins.c
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
/* future_builtins module */
|
||||||
|
|
||||||
|
/* This module provides functions that will be builtins in Python 3.0,
|
||||||
|
but that conflict with builtins that already exist in Python
|
||||||
|
2.x. */
|
||||||
|
|
||||||
|
|
||||||
|
#include "Python.h"
|
||||||
|
|
||||||
|
PyDoc_STRVAR(module_doc,
|
||||||
|
"This module provides functions that will be builtins in Python 3.0,\n\
|
||||||
|
but that conflict with builtins that already exist in Python 2.x.\n\
|
||||||
|
\n\
|
||||||
|
Functions:\n\
|
||||||
|
\n\
|
||||||
|
hex(arg) -- Returns the hexidecimal representation of an integer\n\
|
||||||
|
oct(arg) -- Returns the octal representation of an integer\n\
|
||||||
|
\n\
|
||||||
|
The typical usage of this module is to replace existing builtins in a\n\
|
||||||
|
module's namespace:\n \n\
|
||||||
|
from future_builtins import hex, oct\n");
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
builtin_hex(PyObject *self, PyObject *v)
|
||||||
|
{
|
||||||
|
return PyNumber_ToBase(v, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(hex_doc,
|
||||||
|
"hex(number) -> string\n\
|
||||||
|
\n\
|
||||||
|
Return the hexadecimal representation of an integer or long integer.");
|
||||||
|
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
builtin_oct(PyObject *self, PyObject *v)
|
||||||
|
{
|
||||||
|
return PyNumber_ToBase(v, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(oct_doc,
|
||||||
|
"oct(number) -> string\n\
|
||||||
|
\n\
|
||||||
|
Return the octal representation of an integer or long integer.");
|
||||||
|
|
||||||
|
|
||||||
|
/* List of functions exported by this module */
|
||||||
|
|
||||||
|
static PyMethodDef module_functions[] = {
|
||||||
|
{"hex", builtin_hex, METH_O, hex_doc},
|
||||||
|
{"oct", builtin_oct, METH_O, oct_doc},
|
||||||
|
{NULL, NULL} /* Sentinel */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Initialize this module. */
|
||||||
|
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
initfuture_builtins(void)
|
||||||
|
{
|
||||||
|
PyObject *m;
|
||||||
|
|
||||||
|
m = Py_InitModule3("future_builtins", module_functions, module_doc);
|
||||||
|
if (m == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* any other initialization needed */
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ extern void initaudioop(void);
|
||||||
extern void initbinascii(void);
|
extern void initbinascii(void);
|
||||||
extern void initcmath(void);
|
extern void initcmath(void);
|
||||||
extern void initerrno(void);
|
extern void initerrno(void);
|
||||||
|
extern void initfuture_builtins(void);
|
||||||
extern void initgc(void);
|
extern void initgc(void);
|
||||||
#ifndef MS_WINI64
|
#ifndef MS_WINI64
|
||||||
extern void initimageop(void);
|
extern void initimageop(void);
|
||||||
|
@ -84,6 +85,7 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
{"binascii", initbinascii},
|
{"binascii", initbinascii},
|
||||||
{"cmath", initcmath},
|
{"cmath", initcmath},
|
||||||
{"errno", initerrno},
|
{"errno", initerrno},
|
||||||
|
{"future_builtins", initfuture_builtins},
|
||||||
{"gc", initgc},
|
{"gc", initgc},
|
||||||
#ifndef MS_WINI64
|
#ifndef MS_WINI64
|
||||||
{"imageop", initimageop},
|
{"imageop", initimageop},
|
||||||
|
|
|
@ -1050,6 +1050,10 @@
|
||||||
RelativePath="..\Modules\errnomodule.c"
|
RelativePath="..\Modules\errnomodule.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\Modules\future_builtins.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\Modules\gcmodule.c"
|
RelativePath="..\Modules\gcmodule.c"
|
||||||
>
|
>
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -417,6 +417,9 @@ class PyBuildExt(build_ext):
|
||||||
libraries=math_libs) )
|
libraries=math_libs) )
|
||||||
exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
|
exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
|
||||||
libraries=math_libs) )
|
libraries=math_libs) )
|
||||||
|
# code that will be builtins in the future, but conflict with the
|
||||||
|
# current builtins
|
||||||
|
exts.append( Extension('future_builtins', ['future_builtins.c']) )
|
||||||
# random number generator implemented in C
|
# random number generator implemented in C
|
||||||
exts.append( Extension("_random", ["_randommodule.c"]) )
|
exts.append( Extension("_random", ["_randommodule.c"]) )
|
||||||
# fast iterator tools implemented in C
|
# fast iterator tools implemented in C
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue