Staging
v0.8.1
v0.8.1
swh:1:snp:635f4099902912592851108bcac178ff574f7c5f
Tip revision: 74f4bd53e03ded8408bcc2de67cf0f5a4ac5b1a1 authored by Barry Warsaw on 23 February 2012, 15:59:38 UTC
Bump some more copyright years (as per PEP 101), since this is the first
Bump some more copyright years (as per PEP 101), since this is the first
Tip revision: 74f4bd5
future_builtins.c
/* 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 */
}