/Modules/future_builtins.c
C | 96 lines | 68 code | 21 blank | 7 comment | 7 complexity | 00176b95d0c7a93313a0a99b07c8cb40 MD5 | raw file
1 2/* future_builtins module */ 3 4/* This module provides functions that will be builtins in Python 3.0, 5 but that conflict with builtins that already exist in Python 6 2.x. */ 7 8 9#include "Python.h" 10 11PyDoc_STRVAR(module_doc, 12"This module provides functions that will be builtins in Python 3.0,\n\ 13but that conflict with builtins that already exist in Python 2.x.\n\ 14\n\ 15Functions:\n\ 16\n\ 17hex(arg) -- Returns the hexadecimal representation of an integer\n\ 18oct(arg) -- Returns the octal representation of an integer\n\ 19\n\ 20The typical usage of this module is to replace existing builtins in a\n\ 21module's namespace:\n \n\ 22from future_builtins import hex, oct\n"); 23 24static PyObject * 25builtin_hex(PyObject *self, PyObject *v) 26{ 27 return PyNumber_ToBase(v, 16); 28} 29 30PyDoc_STRVAR(hex_doc, 31"hex(number) -> string\n\ 32\n\ 33Return the hexadecimal representation of an integer or long integer."); 34 35 36static PyObject * 37builtin_oct(PyObject *self, PyObject *v) 38{ 39 return PyNumber_ToBase(v, 8); 40} 41 42PyDoc_STRVAR(oct_doc, 43"oct(number) -> string\n\ 44\n\ 45Return the octal representation of an integer or long integer."); 46 47 48static PyObject * 49builtin_ascii(PyObject *self, PyObject *v) 50{ 51 return PyObject_Repr(v); 52} 53 54PyDoc_STRVAR(ascii_doc, 55"ascii(object) -> string\n\ 56\n\ 57Return the same as repr(). In Python 3.x, the repr() result will\n\ 58contain printable characters unescaped, while the ascii() result\n\ 59will have such characters backslash-escaped."); 60 61/* List of functions exported by this module */ 62 63static PyMethodDef module_functions[] = { 64 {"hex", builtin_hex, METH_O, hex_doc}, 65 {"oct", builtin_oct, METH_O, oct_doc}, 66 {"ascii", builtin_ascii, METH_O, ascii_doc}, 67 {NULL, NULL} /* Sentinel */ 68}; 69 70 71/* Initialize this module. */ 72 73PyMODINIT_FUNC 74initfuture_builtins(void) 75{ 76 PyObject *m, *itertools, *iter_func; 77 char *it_funcs[] = {"imap", "ifilter", "izip", NULL}; 78 char **cur_func; 79 80 m = Py_InitModule3("future_builtins", module_functions, module_doc); 81 if (m == NULL) 82 return; 83 84 itertools = PyImport_ImportModuleNoBlock("itertools"); 85 if (itertools == NULL) 86 return; 87 88 for (cur_func = it_funcs; *cur_func; ++cur_func){ 89 iter_func = PyObject_GetAttrString(itertools, *cur_func); 90 if (iter_func == NULL) 91 return; 92 PyModule_AddObject(m, *cur_func+1, iter_func); 93 } 94 Py_DECREF(itertools); 95 /* any other initialization needed */ 96}