/* 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 hexadecimal 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."); static PyObject * builtin_ascii(PyObject *self, PyObject *v) { return PyObject_Repr(v); } PyDoc_STRVAR(ascii_doc, "ascii(object) -> string\n\ \n\ Return the same as repr(). In Python 3.x, the repr() result will\n\ contain printable characters unescaped, while the ascii() result\n\ will have such characters backslash-escaped."); /* 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}, {"ascii", builtin_ascii, METH_O, ascii_doc}, {NULL, NULL} /* Sentinel */ }; /* Initialize this module. */ PyMODINIT_FUNC initfuture_builtins(void) { PyObject *m, *itertools, *iter_func; char *it_funcs[] = {"imap", "ifilter", "izip", NULL}; char **cur_func; m = Py_InitModule3("future_builtins", module_functions, module_doc); if (m == NULL) return; itertools = PyImport_ImportModuleNoBlock("itertools"); if (itertools == NULL) return; for (cur_func = it_funcs; *cur_func; ++cur_func){ iter_func = PyObject_GetAttrString(itertools, *cur_func); if (iter_func == NULL) return; PyModule_AddObject(m, *cur_func+1, iter_func); } Py_DECREF(itertools); /* any other initialization needed */ }