xref: /third_party/python/Python/clinic/import.c.h (revision 7db96d56)
1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_imp_lock_held__doc__,
6"lock_held($module, /)\n"
7"--\n"
8"\n"
9"Return True if the import lock is currently held, else False.\n"
10"\n"
11"On platforms without threads, return False.");
12
13#define _IMP_LOCK_HELD_METHODDEF    \
14    {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__},
15
16static PyObject *
17_imp_lock_held_impl(PyObject *module);
18
19static PyObject *
20_imp_lock_held(PyObject *module, PyObject *Py_UNUSED(ignored))
21{
22    return _imp_lock_held_impl(module);
23}
24
25PyDoc_STRVAR(_imp_acquire_lock__doc__,
26"acquire_lock($module, /)\n"
27"--\n"
28"\n"
29"Acquires the interpreter\'s import lock for the current thread.\n"
30"\n"
31"This lock should be used by import hooks to ensure thread-safety when importing\n"
32"modules. On platforms without threads, this function does nothing.");
33
34#define _IMP_ACQUIRE_LOCK_METHODDEF    \
35    {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__},
36
37static PyObject *
38_imp_acquire_lock_impl(PyObject *module);
39
40static PyObject *
41_imp_acquire_lock(PyObject *module, PyObject *Py_UNUSED(ignored))
42{
43    return _imp_acquire_lock_impl(module);
44}
45
46PyDoc_STRVAR(_imp_release_lock__doc__,
47"release_lock($module, /)\n"
48"--\n"
49"\n"
50"Release the interpreter\'s import lock.\n"
51"\n"
52"On platforms without threads, this function does nothing.");
53
54#define _IMP_RELEASE_LOCK_METHODDEF    \
55    {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__},
56
57static PyObject *
58_imp_release_lock_impl(PyObject *module);
59
60static PyObject *
61_imp_release_lock(PyObject *module, PyObject *Py_UNUSED(ignored))
62{
63    return _imp_release_lock_impl(module);
64}
65
66PyDoc_STRVAR(_imp__fix_co_filename__doc__,
67"_fix_co_filename($module, code, path, /)\n"
68"--\n"
69"\n"
70"Changes code.co_filename to specify the passed-in file path.\n"
71"\n"
72"  code\n"
73"    Code object to change.\n"
74"  path\n"
75"    File path to use.");
76
77#define _IMP__FIX_CO_FILENAME_METHODDEF    \
78    {"_fix_co_filename", _PyCFunction_CAST(_imp__fix_co_filename), METH_FASTCALL, _imp__fix_co_filename__doc__},
79
80static PyObject *
81_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code,
82                           PyObject *path);
83
84static PyObject *
85_imp__fix_co_filename(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
86{
87    PyObject *return_value = NULL;
88    PyCodeObject *code;
89    PyObject *path;
90
91    if (!_PyArg_CheckPositional("_fix_co_filename", nargs, 2, 2)) {
92        goto exit;
93    }
94    if (!PyObject_TypeCheck(args[0], &PyCode_Type)) {
95        _PyArg_BadArgument("_fix_co_filename", "argument 1", (&PyCode_Type)->tp_name, args[0]);
96        goto exit;
97    }
98    code = (PyCodeObject *)args[0];
99    if (!PyUnicode_Check(args[1])) {
100        _PyArg_BadArgument("_fix_co_filename", "argument 2", "str", args[1]);
101        goto exit;
102    }
103    if (PyUnicode_READY(args[1]) == -1) {
104        goto exit;
105    }
106    path = args[1];
107    return_value = _imp__fix_co_filename_impl(module, code, path);
108
109exit:
110    return return_value;
111}
112
113PyDoc_STRVAR(_imp_create_builtin__doc__,
114"create_builtin($module, spec, /)\n"
115"--\n"
116"\n"
117"Create an extension module.");
118
119#define _IMP_CREATE_BUILTIN_METHODDEF    \
120    {"create_builtin", (PyCFunction)_imp_create_builtin, METH_O, _imp_create_builtin__doc__},
121
122PyDoc_STRVAR(_imp_extension_suffixes__doc__,
123"extension_suffixes($module, /)\n"
124"--\n"
125"\n"
126"Returns the list of file suffixes used to identify extension modules.");
127
128#define _IMP_EXTENSION_SUFFIXES_METHODDEF    \
129    {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__},
130
131static PyObject *
132_imp_extension_suffixes_impl(PyObject *module);
133
134static PyObject *
135_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored))
136{
137    return _imp_extension_suffixes_impl(module);
138}
139
140PyDoc_STRVAR(_imp_init_frozen__doc__,
141"init_frozen($module, name, /)\n"
142"--\n"
143"\n"
144"Initializes a frozen module.");
145
146#define _IMP_INIT_FROZEN_METHODDEF    \
147    {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__},
148
149static PyObject *
150_imp_init_frozen_impl(PyObject *module, PyObject *name);
151
152static PyObject *
153_imp_init_frozen(PyObject *module, PyObject *arg)
154{
155    PyObject *return_value = NULL;
156    PyObject *name;
157
158    if (!PyUnicode_Check(arg)) {
159        _PyArg_BadArgument("init_frozen", "argument", "str", arg);
160        goto exit;
161    }
162    if (PyUnicode_READY(arg) == -1) {
163        goto exit;
164    }
165    name = arg;
166    return_value = _imp_init_frozen_impl(module, name);
167
168exit:
169    return return_value;
170}
171
172PyDoc_STRVAR(_imp_find_frozen__doc__,
173"find_frozen($module, name, /, *, withdata=False)\n"
174"--\n"
175"\n"
176"Return info about the corresponding frozen module (if there is one) or None.\n"
177"\n"
178"The returned info (a 2-tuple):\n"
179"\n"
180" * data         the raw marshalled bytes\n"
181" * is_package   whether or not it is a package\n"
182" * origname     the originally frozen module\'s name, or None if not\n"
183"                a stdlib module (this will usually be the same as\n"
184"                the module\'s current name)");
185
186#define _IMP_FIND_FROZEN_METHODDEF    \
187    {"find_frozen", _PyCFunction_CAST(_imp_find_frozen), METH_FASTCALL|METH_KEYWORDS, _imp_find_frozen__doc__},
188
189static PyObject *
190_imp_find_frozen_impl(PyObject *module, PyObject *name, int withdata);
191
192static PyObject *
193_imp_find_frozen(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
194{
195    PyObject *return_value = NULL;
196    static const char * const _keywords[] = {"", "withdata", NULL};
197    static _PyArg_Parser _parser = {NULL, _keywords, "find_frozen", 0};
198    PyObject *argsbuf[2];
199    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
200    PyObject *name;
201    int withdata = 0;
202
203    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
204    if (!args) {
205        goto exit;
206    }
207    if (!PyUnicode_Check(args[0])) {
208        _PyArg_BadArgument("find_frozen", "argument 1", "str", args[0]);
209        goto exit;
210    }
211    if (PyUnicode_READY(args[0]) == -1) {
212        goto exit;
213    }
214    name = args[0];
215    if (!noptargs) {
216        goto skip_optional_kwonly;
217    }
218    withdata = PyObject_IsTrue(args[1]);
219    if (withdata < 0) {
220        goto exit;
221    }
222skip_optional_kwonly:
223    return_value = _imp_find_frozen_impl(module, name, withdata);
224
225exit:
226    return return_value;
227}
228
229PyDoc_STRVAR(_imp_get_frozen_object__doc__,
230"get_frozen_object($module, name, data=None, /)\n"
231"--\n"
232"\n"
233"Create a code object for a frozen module.");
234
235#define _IMP_GET_FROZEN_OBJECT_METHODDEF    \
236    {"get_frozen_object", _PyCFunction_CAST(_imp_get_frozen_object), METH_FASTCALL, _imp_get_frozen_object__doc__},
237
238static PyObject *
239_imp_get_frozen_object_impl(PyObject *module, PyObject *name,
240                            PyObject *dataobj);
241
242static PyObject *
243_imp_get_frozen_object(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
244{
245    PyObject *return_value = NULL;
246    PyObject *name;
247    PyObject *dataobj = Py_None;
248
249    if (!_PyArg_CheckPositional("get_frozen_object", nargs, 1, 2)) {
250        goto exit;
251    }
252    if (!PyUnicode_Check(args[0])) {
253        _PyArg_BadArgument("get_frozen_object", "argument 1", "str", args[0]);
254        goto exit;
255    }
256    if (PyUnicode_READY(args[0]) == -1) {
257        goto exit;
258    }
259    name = args[0];
260    if (nargs < 2) {
261        goto skip_optional;
262    }
263    dataobj = args[1];
264skip_optional:
265    return_value = _imp_get_frozen_object_impl(module, name, dataobj);
266
267exit:
268    return return_value;
269}
270
271PyDoc_STRVAR(_imp_is_frozen_package__doc__,
272"is_frozen_package($module, name, /)\n"
273"--\n"
274"\n"
275"Returns True if the module name is of a frozen package.");
276
277#define _IMP_IS_FROZEN_PACKAGE_METHODDEF    \
278    {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__},
279
280static PyObject *
281_imp_is_frozen_package_impl(PyObject *module, PyObject *name);
282
283static PyObject *
284_imp_is_frozen_package(PyObject *module, PyObject *arg)
285{
286    PyObject *return_value = NULL;
287    PyObject *name;
288
289    if (!PyUnicode_Check(arg)) {
290        _PyArg_BadArgument("is_frozen_package", "argument", "str", arg);
291        goto exit;
292    }
293    if (PyUnicode_READY(arg) == -1) {
294        goto exit;
295    }
296    name = arg;
297    return_value = _imp_is_frozen_package_impl(module, name);
298
299exit:
300    return return_value;
301}
302
303PyDoc_STRVAR(_imp_is_builtin__doc__,
304"is_builtin($module, name, /)\n"
305"--\n"
306"\n"
307"Returns True if the module name corresponds to a built-in module.");
308
309#define _IMP_IS_BUILTIN_METHODDEF    \
310    {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__},
311
312static PyObject *
313_imp_is_builtin_impl(PyObject *module, PyObject *name);
314
315static PyObject *
316_imp_is_builtin(PyObject *module, PyObject *arg)
317{
318    PyObject *return_value = NULL;
319    PyObject *name;
320
321    if (!PyUnicode_Check(arg)) {
322        _PyArg_BadArgument("is_builtin", "argument", "str", arg);
323        goto exit;
324    }
325    if (PyUnicode_READY(arg) == -1) {
326        goto exit;
327    }
328    name = arg;
329    return_value = _imp_is_builtin_impl(module, name);
330
331exit:
332    return return_value;
333}
334
335PyDoc_STRVAR(_imp_is_frozen__doc__,
336"is_frozen($module, name, /)\n"
337"--\n"
338"\n"
339"Returns True if the module name corresponds to a frozen module.");
340
341#define _IMP_IS_FROZEN_METHODDEF    \
342    {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__},
343
344static PyObject *
345_imp_is_frozen_impl(PyObject *module, PyObject *name);
346
347static PyObject *
348_imp_is_frozen(PyObject *module, PyObject *arg)
349{
350    PyObject *return_value = NULL;
351    PyObject *name;
352
353    if (!PyUnicode_Check(arg)) {
354        _PyArg_BadArgument("is_frozen", "argument", "str", arg);
355        goto exit;
356    }
357    if (PyUnicode_READY(arg) == -1) {
358        goto exit;
359    }
360    name = arg;
361    return_value = _imp_is_frozen_impl(module, name);
362
363exit:
364    return return_value;
365}
366
367PyDoc_STRVAR(_imp__frozen_module_names__doc__,
368"_frozen_module_names($module, /)\n"
369"--\n"
370"\n"
371"Returns the list of available frozen modules.");
372
373#define _IMP__FROZEN_MODULE_NAMES_METHODDEF    \
374    {"_frozen_module_names", (PyCFunction)_imp__frozen_module_names, METH_NOARGS, _imp__frozen_module_names__doc__},
375
376static PyObject *
377_imp__frozen_module_names_impl(PyObject *module);
378
379static PyObject *
380_imp__frozen_module_names(PyObject *module, PyObject *Py_UNUSED(ignored))
381{
382    return _imp__frozen_module_names_impl(module);
383}
384
385PyDoc_STRVAR(_imp__override_frozen_modules_for_tests__doc__,
386"_override_frozen_modules_for_tests($module, override, /)\n"
387"--\n"
388"\n"
389"(internal-only) Override PyConfig.use_frozen_modules.\n"
390"\n"
391"(-1: \"off\", 1: \"on\", 0: no override)\n"
392"See frozen_modules() in Lib/test/support/import_helper.py.");
393
394#define _IMP__OVERRIDE_FROZEN_MODULES_FOR_TESTS_METHODDEF    \
395    {"_override_frozen_modules_for_tests", (PyCFunction)_imp__override_frozen_modules_for_tests, METH_O, _imp__override_frozen_modules_for_tests__doc__},
396
397static PyObject *
398_imp__override_frozen_modules_for_tests_impl(PyObject *module, int override);
399
400static PyObject *
401_imp__override_frozen_modules_for_tests(PyObject *module, PyObject *arg)
402{
403    PyObject *return_value = NULL;
404    int override;
405
406    override = _PyLong_AsInt(arg);
407    if (override == -1 && PyErr_Occurred()) {
408        goto exit;
409    }
410    return_value = _imp__override_frozen_modules_for_tests_impl(module, override);
411
412exit:
413    return return_value;
414}
415
416#if defined(HAVE_DYNAMIC_LOADING)
417
418PyDoc_STRVAR(_imp_create_dynamic__doc__,
419"create_dynamic($module, spec, file=<unrepresentable>, /)\n"
420"--\n"
421"\n"
422"Create an extension module.");
423
424#define _IMP_CREATE_DYNAMIC_METHODDEF    \
425    {"create_dynamic", _PyCFunction_CAST(_imp_create_dynamic), METH_FASTCALL, _imp_create_dynamic__doc__},
426
427static PyObject *
428_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file);
429
430static PyObject *
431_imp_create_dynamic(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
432{
433    PyObject *return_value = NULL;
434    PyObject *spec;
435    PyObject *file = NULL;
436
437    if (!_PyArg_CheckPositional("create_dynamic", nargs, 1, 2)) {
438        goto exit;
439    }
440    spec = args[0];
441    if (nargs < 2) {
442        goto skip_optional;
443    }
444    file = args[1];
445skip_optional:
446    return_value = _imp_create_dynamic_impl(module, spec, file);
447
448exit:
449    return return_value;
450}
451
452#endif /* defined(HAVE_DYNAMIC_LOADING) */
453
454#if defined(HAVE_DYNAMIC_LOADING)
455
456PyDoc_STRVAR(_imp_exec_dynamic__doc__,
457"exec_dynamic($module, mod, /)\n"
458"--\n"
459"\n"
460"Initialize an extension module.");
461
462#define _IMP_EXEC_DYNAMIC_METHODDEF    \
463    {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__},
464
465static int
466_imp_exec_dynamic_impl(PyObject *module, PyObject *mod);
467
468static PyObject *
469_imp_exec_dynamic(PyObject *module, PyObject *mod)
470{
471    PyObject *return_value = NULL;
472    int _return_value;
473
474    _return_value = _imp_exec_dynamic_impl(module, mod);
475    if ((_return_value == -1) && PyErr_Occurred()) {
476        goto exit;
477    }
478    return_value = PyLong_FromLong((long)_return_value);
479
480exit:
481    return return_value;
482}
483
484#endif /* defined(HAVE_DYNAMIC_LOADING) */
485
486PyDoc_STRVAR(_imp_exec_builtin__doc__,
487"exec_builtin($module, mod, /)\n"
488"--\n"
489"\n"
490"Initialize a built-in module.");
491
492#define _IMP_EXEC_BUILTIN_METHODDEF    \
493    {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__},
494
495static int
496_imp_exec_builtin_impl(PyObject *module, PyObject *mod);
497
498static PyObject *
499_imp_exec_builtin(PyObject *module, PyObject *mod)
500{
501    PyObject *return_value = NULL;
502    int _return_value;
503
504    _return_value = _imp_exec_builtin_impl(module, mod);
505    if ((_return_value == -1) && PyErr_Occurred()) {
506        goto exit;
507    }
508    return_value = PyLong_FromLong((long)_return_value);
509
510exit:
511    return return_value;
512}
513
514PyDoc_STRVAR(_imp_source_hash__doc__,
515"source_hash($module, /, key, source)\n"
516"--\n"
517"\n");
518
519#define _IMP_SOURCE_HASH_METHODDEF    \
520    {"source_hash", _PyCFunction_CAST(_imp_source_hash), METH_FASTCALL|METH_KEYWORDS, _imp_source_hash__doc__},
521
522static PyObject *
523_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source);
524
525static PyObject *
526_imp_source_hash(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
527{
528    PyObject *return_value = NULL;
529    static const char * const _keywords[] = {"key", "source", NULL};
530    static _PyArg_Parser _parser = {NULL, _keywords, "source_hash", 0};
531    PyObject *argsbuf[2];
532    long key;
533    Py_buffer source = {NULL, NULL};
534
535    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
536    if (!args) {
537        goto exit;
538    }
539    key = PyLong_AsLong(args[0]);
540    if (key == -1 && PyErr_Occurred()) {
541        goto exit;
542    }
543    if (PyObject_GetBuffer(args[1], &source, PyBUF_SIMPLE) != 0) {
544        goto exit;
545    }
546    if (!PyBuffer_IsContiguous(&source, 'C')) {
547        _PyArg_BadArgument("source_hash", "argument 'source'", "contiguous buffer", args[1]);
548        goto exit;
549    }
550    return_value = _imp_source_hash_impl(module, key, &source);
551
552exit:
553    /* Cleanup for source */
554    if (source.obj) {
555       PyBuffer_Release(&source);
556    }
557
558    return return_value;
559}
560
561#ifndef _IMP_CREATE_DYNAMIC_METHODDEF
562    #define _IMP_CREATE_DYNAMIC_METHODDEF
563#endif /* !defined(_IMP_CREATE_DYNAMIC_METHODDEF) */
564
565#ifndef _IMP_EXEC_DYNAMIC_METHODDEF
566    #define _IMP_EXEC_DYNAMIC_METHODDEF
567#endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
568/*[clinic end generated code: output=8d0f4305b1d0714b input=a9049054013a1b77]*/
569