symbian-qemu-0.9.1-12/python-2.6.1/Modules/future_builtins.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 
       
    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\
       
    14 \n\
       
    15 Functions:\n\
       
    16 \n\
       
    17 hex(arg) -- Returns the hexadecimal representation of an integer\n\
       
    18 oct(arg) -- Returns the octal representation of an integer\n\
       
    19 \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");
       
    23 
       
    24 static PyObject *
       
    25 builtin_hex(PyObject *self, PyObject *v)
       
    26 {
       
    27 	return PyNumber_ToBase(v, 16);
       
    28 }
       
    29 
       
    30 PyDoc_STRVAR(hex_doc,
       
    31 "hex(number) -> string\n\
       
    32 \n\
       
    33 Return the hexadecimal representation of an integer or long integer.");
       
    34 
       
    35 
       
    36 static PyObject *
       
    37 builtin_oct(PyObject *self, PyObject *v)
       
    38 {
       
    39 	return PyNumber_ToBase(v, 8);
       
    40 }
       
    41 
       
    42 PyDoc_STRVAR(oct_doc,
       
    43 "oct(number) -> string\n\
       
    44 \n\
       
    45 Return the octal representation of an integer or long integer.");
       
    46 
       
    47 
       
    48 static PyObject *
       
    49 builtin_ascii(PyObject *self, PyObject *v)
       
    50 {
       
    51 	return PyObject_Repr(v);
       
    52 }
       
    53 
       
    54 PyDoc_STRVAR(ascii_doc,
       
    55 "ascii(object) -> string\n\
       
    56 \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.");
       
    60 
       
    61 /* List of functions exported by this module */
       
    62 
       
    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 */
       
    68 };
       
    69 
       
    70 
       
    71 /* Initialize this module. */
       
    72 
       
    73 PyMODINIT_FUNC
       
    74 initfuture_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 }