2 /* future_builtins module */
4 /* This module provides functions that will be builtins in Python 3.0,
5 but that conflict with builtins that already exist in Python
11 PyDoc_STRVAR(module_doc
,
12 "This module provides functions that will be builtins in Python 3.0,\n\
13 but that conflict with builtins that already exist in Python 2.x.\n\
17 hex(arg) -- Returns the hexadecimal representation of an integer\n\
18 oct(arg) -- Returns the octal representation of an integer\n\
20 The typical usage of this module is to replace existing builtins in a\n\
21 module's namespace:\n \n\
22 from future_builtins import hex, oct\n");
25 builtin_hex(PyObject
*self
, PyObject
*v
)
27 return PyNumber_ToBase(v
, 16);
31 "hex(number) -> string\n\
33 Return the hexadecimal representation of an integer or long integer.");
37 builtin_oct(PyObject
*self
, PyObject
*v
)
39 return PyNumber_ToBase(v
, 8);
43 "oct(number) -> string\n\
45 Return the octal representation of an integer or long integer.");
49 builtin_ascii(PyObject
*self
, PyObject
*v
)
51 return PyObject_Repr(v
);
54 PyDoc_STRVAR(ascii_doc
,
55 "ascii(object) -> string\n\
57 Return the same as repr(). In Python 3.x, the repr() result will\n\
58 contain printable characters unescaped, while the ascii() result\n\
59 will have such characters backslash-escaped.");
61 /* List of functions exported by this module */
63 static 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 */
71 /* Initialize this module. */
74 initfuture_builtins(void)
76 PyObject
*m
, *itertools
, *iter_func
;
77 char *it_funcs
[] = {"imap", "ifilter", "izip", NULL
};
80 m
= Py_InitModule3("future_builtins", module_functions
, module_doc
);
84 itertools
= PyImport_ImportModuleNoBlock("itertools");
85 if (itertools
== NULL
)
88 for (cur_func
= it_funcs
; *cur_func
; ++cur_func
){
89 iter_func
= PyObject_GetAttrString(itertools
, *cur_func
);
90 if (iter_func
== NULL
)
92 PyModule_AddObject(m
, *cur_func
+1, iter_func
);
95 /* any other initialization needed */