Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 : : # include "pycore_gc.h" // PyGC_Head
7 : : # include "pycore_runtime.h" // _Py_ID()
8 : : #endif
9 : :
10 : :
11 : : PyDoc_STRVAR(module___init____doc__,
12 : : "module(name, doc=None)\n"
13 : : "--\n"
14 : : "\n"
15 : : "Create a module object.\n"
16 : : "\n"
17 : : "The name must be a string; the optional doc argument can have any type.");
18 : :
19 : : static int
20 : : module___init___impl(PyModuleObject *self, PyObject *name, PyObject *doc);
21 : :
22 : : static int
23 : 640 : module___init__(PyObject *self, PyObject *args, PyObject *kwargs)
24 : : {
25 : 640 : int return_value = -1;
26 : : #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
27 : :
28 : : #define NUM_KEYWORDS 2
29 : : static struct {
30 : : PyGC_Head _this_is_not_used;
31 : : PyObject_VAR_HEAD
32 : : PyObject *ob_item[NUM_KEYWORDS];
33 : : } _kwtuple = {
34 : : .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
35 : : .ob_item = { &_Py_ID(name), &_Py_ID(doc), },
36 : : };
37 : : #undef NUM_KEYWORDS
38 : : #define KWTUPLE (&_kwtuple.ob_base.ob_base)
39 : :
40 : : #else // !Py_BUILD_CORE
41 : : # define KWTUPLE NULL
42 : : #endif // !Py_BUILD_CORE
43 : :
44 : : static const char * const _keywords[] = {"name", "doc", NULL};
45 : : static _PyArg_Parser _parser = {
46 : : .keywords = _keywords,
47 : : .fname = "module",
48 : : .kwtuple = KWTUPLE,
49 : : };
50 : : #undef KWTUPLE
51 : : PyObject *argsbuf[2];
52 : : PyObject * const *fastargs;
53 : 640 : Py_ssize_t nargs = PyTuple_GET_SIZE(args);
54 [ - + ]: 640 : Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
55 : : PyObject *name;
56 : 640 : PyObject *doc = Py_None;
57 : :
58 [ + - + - : 640 : fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 2, 0, argsbuf);
+ - + - ]
59 [ - + ]: 640 : if (!fastargs) {
60 : 0 : goto exit;
61 : : }
62 [ - + ]: 640 : if (!PyUnicode_Check(fastargs[0])) {
63 : 0 : _PyArg_BadArgument("module", "argument 'name'", "str", fastargs[0]);
64 : 0 : goto exit;
65 : : }
66 [ - + ]: 640 : if (PyUnicode_READY(fastargs[0]) == -1) {
67 : 0 : goto exit;
68 : : }
69 : 640 : name = fastargs[0];
70 [ + - ]: 640 : if (!noptargs) {
71 : 640 : goto skip_optional_pos;
72 : : }
73 : 0 : doc = fastargs[1];
74 : 640 : skip_optional_pos:
75 : 640 : return_value = module___init___impl((PyModuleObject *)self, name, doc);
76 : :
77 : 640 : exit:
78 : 640 : return return_value;
79 : : }
80 : : /*[clinic end generated code: output=2f897c9e4721f03f input=a9049054013a1b77]*/
|