mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +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 @@ def detect_modules(self): | ||||||
|                                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
	
	 Eric Smith
						Eric Smith