PageRenderTime 243ms CodeModel.GetById 121ms app.highlight 5ms RepoModel.GetById 116ms app.codeStats 0ms

/Modules/future_builtins.c

http://unladen-swallow.googlecode.com/
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}