[Python-checkins] r60970 - in python/trunk: Lib/test/test_future_builtins.py Misc/NEWS Modules/future_builtins.c PC/config.c PCbuild/pythoncore.vcproj setup.py

eric.smith python-checkins at python.org
Sat Feb 23 04:09:44 CET 2008


Author: eric.smith
Date: Sat Feb 23 04:09:44 2008
New Revision: 60970

Added:
   python/trunk/Lib/test/test_future_builtins.py
   python/trunk/Modules/future_builtins.c
Modified:
   python/trunk/Misc/NEWS
   python/trunk/PC/config.c
   python/trunk/PCbuild/pythoncore.vcproj
   python/trunk/setup.py
Log:
Added future_builtins, which contains PEP 3127 compatible versions of hex() and oct().

Added: python/trunk/Lib/test/test_future_builtins.py
==============================================================================
--- (empty file)
+++ python/trunk/Lib/test/test_future_builtins.py	Sat Feb 23 04:09:44 2008
@@ -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)

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sat Feb 23 04:09:44 2008
@@ -12,6 +12,14 @@
 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
   exponents for exponents with absolute value < 100.  Follows C99
   standard.  This is a change on Windows, which would use 3 digits.

Added: python/trunk/Modules/future_builtins.c
==============================================================================
--- (empty file)
+++ python/trunk/Modules/future_builtins.c	Sat Feb 23 04:09:44 2008
@@ -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 */
+}

Modified: python/trunk/PC/config.c
==============================================================================
--- python/trunk/PC/config.c	(original)
+++ python/trunk/PC/config.c	Sat Feb 23 04:09:44 2008
@@ -12,6 +12,7 @@
 extern void initbinascii(void);
 extern void initcmath(void);
 extern void initerrno(void);
+extern void initfuture_builtins(void);
 extern void initgc(void);
 #ifndef MS_WINI64
 extern void initimageop(void);
@@ -84,6 +85,7 @@
         {"binascii", initbinascii},
         {"cmath", initcmath},
         {"errno", initerrno},
+        {"future_builtins", initfuture_builtins},
         {"gc", initgc},
 #ifndef MS_WINI64
         {"imageop", initimageop},

Modified: python/trunk/PCbuild/pythoncore.vcproj
==============================================================================
--- python/trunk/PCbuild/pythoncore.vcproj	(original)
+++ python/trunk/PCbuild/pythoncore.vcproj	Sat Feb 23 04:09:44 2008
@@ -1051,6 +1051,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\Modules\future_builtins.c"
+				>
+			</File>
+			<File
 				RelativePath="..\Modules\gcmodule.c"
 				>
 			</File>

Modified: python/trunk/setup.py
==============================================================================
--- python/trunk/setup.py	(original)
+++ python/trunk/setup.py	Sat Feb 23 04:09:44 2008
@@ -417,6 +417,9 @@
                                libraries=math_libs) )
         exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
                                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
         exts.append( Extension("_random", ["_randommodule.c"]) )
         # fast iterator tools implemented in C


More information about the Python-checkins mailing list