blob: 783ed4ebb96a7d2045f0784d9510de5c5acd64b8 [file] [log] [blame]
Brett Cannonfd4d0502014-05-30 11:21:14 -04001/*[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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030017_imp_lock_held_impl(PyObject *module);
Brett Cannonfd4d0502014-05-30 11:21:14 -040018
19static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030020_imp_lock_held(PyObject *module, PyObject *Py_UNUSED(ignored))
Brett Cannonfd4d0502014-05-30 11:21:14 -040021{
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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030038_imp_acquire_lock_impl(PyObject *module);
Brett Cannonfd4d0502014-05-30 11:21:14 -040039
40static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030041_imp_acquire_lock(PyObject *module, PyObject *Py_UNUSED(ignored))
Brett Cannonfd4d0502014-05-30 11:21:14 -040042{
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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030058_imp_release_lock_impl(PyObject *module);
Brett Cannonfd4d0502014-05-30 11:21:14 -040059
60static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030061_imp_release_lock(PyObject *module, PyObject *Py_UNUSED(ignored))
Brett Cannonfd4d0502014-05-30 11:21:14 -040062{
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 \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +020078 {"_fix_co_filename", (PyCFunction)(void(*)(void))_imp__fix_co_filename, METH_FASTCALL, _imp__fix_co_filename__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -040079
80static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030081_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code,
Larry Hastings89964c42015-04-14 18:07:59 -040082 PyObject *path);
Brett Cannonfd4d0502014-05-30 11:21:14 -040083
84static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +020085_imp__fix_co_filename(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonfd4d0502014-05-30 11:21:14 -040086{
87 PyObject *return_value = NULL;
88 PyCodeObject *code;
89 PyObject *path;
90
Serhiy Storchaka4fa95912019-01-11 16:01:14 +020091 if (!_PyArg_CheckPositional("_fix_co_filename", nargs, 2, 2)) {
Victor Stinner259f0e42017-01-17 01:35:17 +010092 goto exit;
93 }
Serhiy Storchaka4fa95912019-01-11 16:01:14 +020094 if (!PyObject_TypeCheck(args[0], &PyCode_Type)) {
95 _PyArg_BadArgument("_fix_co_filename", 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", 2, "str", args[1]);
101 goto exit;
102 }
103 if (PyUnicode_READY(args[1]) == -1) {
104 goto exit;
105 }
106 path = args[1];
Brett Cannonfd4d0502014-05-30 11:21:14 -0400107 return_value = _imp__fix_co_filename_impl(module, code, path);
108
109exit:
110 return return_value;
111}
112
Nick Coghland5cacbb2015-05-23 22:24:10 +1000113PyDoc_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
Brett Cannonfd4d0502014-05-30 11:21:14 -0400122PyDoc_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 *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300132_imp_extension_suffixes_impl(PyObject *module);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400133
134static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300135_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored))
Brett Cannonfd4d0502014-05-30 11:21:14 -0400136{
137 return _imp_extension_suffixes_impl(module);
138}
139
Brett Cannonfd4d0502014-05-30 11:21:14 -0400140PyDoc_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 \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300147 {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400148
149static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300150_imp_init_frozen_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400151
152static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300153_imp_init_frozen(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400154{
155 PyObject *return_value = NULL;
156 PyObject *name;
157
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200158 if (!PyUnicode_Check(arg)) {
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200159 _PyArg_BadArgument("init_frozen", 0, "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400160 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300161 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200162 if (PyUnicode_READY(arg) == -1) {
163 goto exit;
164 }
165 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400166 return_value = _imp_init_frozen_impl(module, name);
167
168exit:
169 return return_value;
170}
171
172PyDoc_STRVAR(_imp_get_frozen_object__doc__,
173"get_frozen_object($module, name, /)\n"
174"--\n"
175"\n"
176"Create a code object for a frozen module.");
177
178#define _IMP_GET_FROZEN_OBJECT_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300179 {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400180
181static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300182_imp_get_frozen_object_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400183
184static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300185_imp_get_frozen_object(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400186{
187 PyObject *return_value = NULL;
188 PyObject *name;
189
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200190 if (!PyUnicode_Check(arg)) {
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200191 _PyArg_BadArgument("get_frozen_object", 0, "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400192 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300193 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200194 if (PyUnicode_READY(arg) == -1) {
195 goto exit;
196 }
197 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400198 return_value = _imp_get_frozen_object_impl(module, name);
199
200exit:
201 return return_value;
202}
203
204PyDoc_STRVAR(_imp_is_frozen_package__doc__,
205"is_frozen_package($module, name, /)\n"
206"--\n"
207"\n"
208"Returns True if the module name is of a frozen package.");
209
210#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300211 {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400212
213static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300214_imp_is_frozen_package_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400215
216static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300217_imp_is_frozen_package(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400218{
219 PyObject *return_value = NULL;
220 PyObject *name;
221
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200222 if (!PyUnicode_Check(arg)) {
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200223 _PyArg_BadArgument("is_frozen_package", 0, "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400224 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300225 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200226 if (PyUnicode_READY(arg) == -1) {
227 goto exit;
228 }
229 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400230 return_value = _imp_is_frozen_package_impl(module, name);
231
232exit:
233 return return_value;
234}
235
236PyDoc_STRVAR(_imp_is_builtin__doc__,
237"is_builtin($module, name, /)\n"
238"--\n"
239"\n"
240"Returns True if the module name corresponds to a built-in module.");
241
242#define _IMP_IS_BUILTIN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300243 {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400244
245static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300246_imp_is_builtin_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400247
248static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300249_imp_is_builtin(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400250{
251 PyObject *return_value = NULL;
252 PyObject *name;
253
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200254 if (!PyUnicode_Check(arg)) {
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200255 _PyArg_BadArgument("is_builtin", 0, "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400256 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300257 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200258 if (PyUnicode_READY(arg) == -1) {
259 goto exit;
260 }
261 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400262 return_value = _imp_is_builtin_impl(module, name);
263
264exit:
265 return return_value;
266}
267
268PyDoc_STRVAR(_imp_is_frozen__doc__,
269"is_frozen($module, name, /)\n"
270"--\n"
271"\n"
272"Returns True if the module name corresponds to a frozen module.");
273
274#define _IMP_IS_FROZEN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300275 {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400276
277static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300278_imp_is_frozen_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400279
280static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300281_imp_is_frozen(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400282{
283 PyObject *return_value = NULL;
284 PyObject *name;
285
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200286 if (!PyUnicode_Check(arg)) {
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200287 _PyArg_BadArgument("is_frozen", 0, "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400288 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300289 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200290 if (PyUnicode_READY(arg) == -1) {
291 goto exit;
292 }
293 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400294 return_value = _imp_is_frozen_impl(module, name);
295
296exit:
297 return return_value;
298}
299
300#if defined(HAVE_DYNAMIC_LOADING)
301
Nick Coghland5cacbb2015-05-23 22:24:10 +1000302PyDoc_STRVAR(_imp_create_dynamic__doc__,
303"create_dynamic($module, spec, file=None, /)\n"
Brett Cannonfd4d0502014-05-30 11:21:14 -0400304"--\n"
305"\n"
Nick Coghland5cacbb2015-05-23 22:24:10 +1000306"Create an extension module.");
Brett Cannonfd4d0502014-05-30 11:21:14 -0400307
Nick Coghland5cacbb2015-05-23 22:24:10 +1000308#define _IMP_CREATE_DYNAMIC_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200309 {"create_dynamic", (PyCFunction)(void(*)(void))_imp_create_dynamic, METH_FASTCALL, _imp_create_dynamic__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400310
311static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300312_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400313
314static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200315_imp_create_dynamic(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400316{
317 PyObject *return_value = NULL;
Nick Coghland5cacbb2015-05-23 22:24:10 +1000318 PyObject *spec;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400319 PyObject *file = NULL;
320
Sylvain74453812017-06-10 06:51:48 +0200321 if (!_PyArg_UnpackStack(args, nargs, "create_dynamic",
322 1, 2,
323 &spec, &file)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100324 goto exit;
325 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000326 return_value = _imp_create_dynamic_impl(module, spec, file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400327
328exit:
329 return return_value;
330}
331
332#endif /* defined(HAVE_DYNAMIC_LOADING) */
333
Nick Coghland5cacbb2015-05-23 22:24:10 +1000334#if defined(HAVE_DYNAMIC_LOADING)
335
336PyDoc_STRVAR(_imp_exec_dynamic__doc__,
337"exec_dynamic($module, mod, /)\n"
338"--\n"
339"\n"
340"Initialize an extension module.");
341
342#define _IMP_EXEC_DYNAMIC_METHODDEF \
343 {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__},
344
345static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300346_imp_exec_dynamic_impl(PyObject *module, PyObject *mod);
Nick Coghland5cacbb2015-05-23 22:24:10 +1000347
348static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300349_imp_exec_dynamic(PyObject *module, PyObject *mod)
Nick Coghland5cacbb2015-05-23 22:24:10 +1000350{
351 PyObject *return_value = NULL;
352 int _return_value;
353
354 _return_value = _imp_exec_dynamic_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300355 if ((_return_value == -1) && PyErr_Occurred()) {
Nick Coghland5cacbb2015-05-23 22:24:10 +1000356 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300357 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000358 return_value = PyLong_FromLong((long)_return_value);
359
360exit:
361 return return_value;
362}
363
364#endif /* defined(HAVE_DYNAMIC_LOADING) */
365
Larry Hastings1df0b352015-08-24 19:53:56 -0700366PyDoc_STRVAR(_imp_exec_builtin__doc__,
367"exec_builtin($module, mod, /)\n"
368"--\n"
369"\n"
Larry Hastings01b1ff62015-08-24 20:23:27 -0700370"Initialize a built-in module.");
Larry Hastings1df0b352015-08-24 19:53:56 -0700371
372#define _IMP_EXEC_BUILTIN_METHODDEF \
373 {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__},
374
375static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300376_imp_exec_builtin_impl(PyObject *module, PyObject *mod);
Larry Hastings1df0b352015-08-24 19:53:56 -0700377
378static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300379_imp_exec_builtin(PyObject *module, PyObject *mod)
Larry Hastings1df0b352015-08-24 19:53:56 -0700380{
381 PyObject *return_value = NULL;
382 int _return_value;
383
384 _return_value = _imp_exec_builtin_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300385 if ((_return_value == -1) && PyErr_Occurred()) {
Larry Hastings1df0b352015-08-24 19:53:56 -0700386 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300387 }
Larry Hastings1df0b352015-08-24 19:53:56 -0700388 return_value = PyLong_FromLong((long)_return_value);
389
390exit:
391 return return_value;
392}
393
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800394PyDoc_STRVAR(_imp_source_hash__doc__,
395"source_hash($module, /, key, source)\n"
396"--\n"
397"\n");
398
399#define _IMP_SOURCE_HASH_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200400 {"source_hash", (PyCFunction)(void(*)(void))_imp_source_hash, METH_FASTCALL|METH_KEYWORDS, _imp_source_hash__doc__},
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800401
402static PyObject *
403_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source);
404
405static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200406_imp_source_hash(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800407{
408 PyObject *return_value = NULL;
409 static const char * const _keywords[] = {"key", "source", NULL};
410 static _PyArg_Parser _parser = {"ly*:source_hash", _keywords, 0};
411 long key;
412 Py_buffer source = {NULL, NULL};
413
414 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
415 &key, &source)) {
416 goto exit;
417 }
418 return_value = _imp_source_hash_impl(module, key, &source);
419
420exit:
421 /* Cleanup for source */
422 if (source.obj) {
423 PyBuffer_Release(&source);
424 }
425
426 return return_value;
427}
428
Nick Coghland5cacbb2015-05-23 22:24:10 +1000429#ifndef _IMP_CREATE_DYNAMIC_METHODDEF
430 #define _IMP_CREATE_DYNAMIC_METHODDEF
431#endif /* !defined(_IMP_CREATE_DYNAMIC_METHODDEF) */
432
433#ifndef _IMP_EXEC_DYNAMIC_METHODDEF
434 #define _IMP_EXEC_DYNAMIC_METHODDEF
435#endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
Serhiy Storchaka4fa95912019-01-11 16:01:14 +0200436/*[clinic end generated code: output=22062cee6e8ba7f3 input=a9049054013a1b77]*/