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