mirror of https://github.com/python/cpython
103 lines
2.1 KiB
Python
103 lines
2.1 KiB
Python
"""framer's C code templates.
|
|
|
|
Templates use the following variables:
|
|
|
|
FileName: name of the file that contains the C source code
|
|
ModuleName: name of the module, as in "import ModuleName"
|
|
ModuleDocstring: C string containing the module doc string
|
|
"""
|
|
|
|
module_start = '#include "Python.h"'
|
|
member_include = '#include "structmember.h"'
|
|
|
|
module_doc = """\
|
|
PyDoc_STRVAR(%(ModuleName)s_doc,
|
|
%(ModuleDocstring)s);
|
|
"""
|
|
|
|
methoddef_start = """\
|
|
static struct PyMethodDef %(MethodDefName)s[] = {"""
|
|
|
|
methoddef_def = """\
|
|
{"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s},"""
|
|
|
|
methoddef_def_doc = """\
|
|
{"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s,
|
|
%(DocstringVar)s},"""
|
|
|
|
methoddef_end = """\
|
|
{NULL, NULL}
|
|
};
|
|
"""
|
|
|
|
memberdef_start = """\
|
|
#define OFF(X) offsetof(%(StructName)s, X)
|
|
|
|
static struct PyMemberDef %(MemberDefName)s[] = {"""
|
|
|
|
memberdef_def_doc = """\
|
|
{"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s,
|
|
%(Docstring)s},"""
|
|
|
|
memberdef_def = """\
|
|
{"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s},"""
|
|
|
|
memberdef_end = """\
|
|
{NULL}
|
|
};
|
|
|
|
#undef OFF
|
|
"""
|
|
|
|
dealloc_func = """static void
|
|
%(name)s(PyObject *ob)
|
|
{
|
|
}
|
|
"""
|
|
|
|
docstring = """\
|
|
PyDoc_STRVAR(%(DocstringVar)s,
|
|
%(Docstring)s);
|
|
"""
|
|
|
|
funcdef_start = """\
|
|
static PyObject *
|
|
%(name)s(%(args)s)
|
|
{"""
|
|
|
|
funcdef_end = """\
|
|
}
|
|
"""
|
|
|
|
varargs = """\
|
|
if (!PyArg_ParseTuple(args, \"%(ArgParse)s:%(PythonName)s\",
|
|
%(ArgTargets)s))
|
|
return NULL;"""
|
|
|
|
module_init_start = """\
|
|
PyMODINIT_FUNC
|
|
init%(ModuleName)s(void)
|
|
{
|
|
PyObject *mod;
|
|
|
|
mod = Py_InitModule3("%(ModuleName)s", %(MethodDefName)s,
|
|
%(ModuleName)s_doc);
|
|
if (mod == NULL)
|
|
return;
|
|
"""
|
|
|
|
type_init_type = " %(CTypeName)s.ob_type = &PyType_Type;"
|
|
module_add_type = """\
|
|
if (!PyObject_SetAttrString(mod, "%(TypeName)s",
|
|
(PyObject *)&%(CTypeName)s))
|
|
return;
|
|
"""
|
|
|
|
type_struct_start = """\
|
|
static PyTypeObject %(CTypeName)s = {
|
|
PyObject_HEAD_INIT(0)"""
|
|
|
|
type_struct_end = """\
|
|
};
|
|
"""
|