blob: d34d68fed55408909391a6d211a8a5fb4702824e [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
Sylvain74453812017-06-10 06:51:48 +020091 if (!_PyArg_ParseStack(args, nargs, "O!U:_fix_co_filename",
92 &PyCode_Type, &code, &path)) {
Victor Stinner259f0e42017-01-17 01:35:17 +010093 goto exit;
94 }
Brett Cannonfd4d0502014-05-30 11:21:14 -040095 return_value = _imp__fix_co_filename_impl(module, code, path);
96
97exit:
98 return return_value;
99}
100
Nick Coghland5cacbb2015-05-23 22:24:10 +1000101PyDoc_STRVAR(_imp_create_builtin__doc__,
102"create_builtin($module, spec, /)\n"
103"--\n"
104"\n"
105"Create an extension module.");
106
107#define _IMP_CREATE_BUILTIN_METHODDEF \
108 {"create_builtin", (PyCFunction)_imp_create_builtin, METH_O, _imp_create_builtin__doc__},
109
Brett Cannonfd4d0502014-05-30 11:21:14 -0400110PyDoc_STRVAR(_imp_extension_suffixes__doc__,
111"extension_suffixes($module, /)\n"
112"--\n"
113"\n"
114"Returns the list of file suffixes used to identify extension modules.");
115
116#define _IMP_EXTENSION_SUFFIXES_METHODDEF \
117 {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__},
118
119static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300120_imp_extension_suffixes_impl(PyObject *module);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400121
122static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300123_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored))
Brett Cannonfd4d0502014-05-30 11:21:14 -0400124{
125 return _imp_extension_suffixes_impl(module);
126}
127
Brett Cannonfd4d0502014-05-30 11:21:14 -0400128PyDoc_STRVAR(_imp_init_frozen__doc__,
129"init_frozen($module, name, /)\n"
130"--\n"
131"\n"
132"Initializes a frozen module.");
133
134#define _IMP_INIT_FROZEN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300135 {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400136
137static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300138_imp_init_frozen_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400139
140static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300141_imp_init_frozen(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400142{
143 PyObject *return_value = NULL;
144 PyObject *name;
145
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200146 if (!PyUnicode_Check(arg)) {
147 _PyArg_BadArgument("init_frozen", "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400148 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300149 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200150 if (PyUnicode_READY(arg) == -1) {
151 goto exit;
152 }
153 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400154 return_value = _imp_init_frozen_impl(module, name);
155
156exit:
157 return return_value;
158}
159
160PyDoc_STRVAR(_imp_get_frozen_object__doc__,
161"get_frozen_object($module, name, /)\n"
162"--\n"
163"\n"
164"Create a code object for a frozen module.");
165
166#define _IMP_GET_FROZEN_OBJECT_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300167 {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400168
169static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300170_imp_get_frozen_object_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400171
172static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300173_imp_get_frozen_object(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400174{
175 PyObject *return_value = NULL;
176 PyObject *name;
177
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200178 if (!PyUnicode_Check(arg)) {
179 _PyArg_BadArgument("get_frozen_object", "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400180 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300181 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200182 if (PyUnicode_READY(arg) == -1) {
183 goto exit;
184 }
185 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400186 return_value = _imp_get_frozen_object_impl(module, name);
187
188exit:
189 return return_value;
190}
191
192PyDoc_STRVAR(_imp_is_frozen_package__doc__,
193"is_frozen_package($module, name, /)\n"
194"--\n"
195"\n"
196"Returns True if the module name is of a frozen package.");
197
198#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300199 {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400200
201static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300202_imp_is_frozen_package_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400203
204static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300205_imp_is_frozen_package(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400206{
207 PyObject *return_value = NULL;
208 PyObject *name;
209
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200210 if (!PyUnicode_Check(arg)) {
211 _PyArg_BadArgument("is_frozen_package", "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400212 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300213 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200214 if (PyUnicode_READY(arg) == -1) {
215 goto exit;
216 }
217 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400218 return_value = _imp_is_frozen_package_impl(module, name);
219
220exit:
221 return return_value;
222}
223
224PyDoc_STRVAR(_imp_is_builtin__doc__,
225"is_builtin($module, name, /)\n"
226"--\n"
227"\n"
228"Returns True if the module name corresponds to a built-in module.");
229
230#define _IMP_IS_BUILTIN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300231 {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400232
233static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300234_imp_is_builtin_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400235
236static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300237_imp_is_builtin(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400238{
239 PyObject *return_value = NULL;
240 PyObject *name;
241
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200242 if (!PyUnicode_Check(arg)) {
243 _PyArg_BadArgument("is_builtin", "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400244 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300245 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200246 if (PyUnicode_READY(arg) == -1) {
247 goto exit;
248 }
249 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400250 return_value = _imp_is_builtin_impl(module, name);
251
252exit:
253 return return_value;
254}
255
256PyDoc_STRVAR(_imp_is_frozen__doc__,
257"is_frozen($module, name, /)\n"
258"--\n"
259"\n"
260"Returns True if the module name corresponds to a frozen module.");
261
262#define _IMP_IS_FROZEN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300263 {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400264
265static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300266_imp_is_frozen_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400267
268static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300269_imp_is_frozen(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400270{
271 PyObject *return_value = NULL;
272 PyObject *name;
273
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200274 if (!PyUnicode_Check(arg)) {
275 _PyArg_BadArgument("is_frozen", "str", arg);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400276 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300277 }
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200278 if (PyUnicode_READY(arg) == -1) {
279 goto exit;
280 }
281 name = arg;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400282 return_value = _imp_is_frozen_impl(module, name);
283
284exit:
285 return return_value;
286}
287
288#if defined(HAVE_DYNAMIC_LOADING)
289
Nick Coghland5cacbb2015-05-23 22:24:10 +1000290PyDoc_STRVAR(_imp_create_dynamic__doc__,
291"create_dynamic($module, spec, file=None, /)\n"
Brett Cannonfd4d0502014-05-30 11:21:14 -0400292"--\n"
293"\n"
Nick Coghland5cacbb2015-05-23 22:24:10 +1000294"Create an extension module.");
Brett Cannonfd4d0502014-05-30 11:21:14 -0400295
Nick Coghland5cacbb2015-05-23 22:24:10 +1000296#define _IMP_CREATE_DYNAMIC_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200297 {"create_dynamic", (PyCFunction)(void(*)(void))_imp_create_dynamic, METH_FASTCALL, _imp_create_dynamic__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400298
299static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300300_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400301
302static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200303_imp_create_dynamic(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400304{
305 PyObject *return_value = NULL;
Nick Coghland5cacbb2015-05-23 22:24:10 +1000306 PyObject *spec;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400307 PyObject *file = NULL;
308
Sylvain74453812017-06-10 06:51:48 +0200309 if (!_PyArg_UnpackStack(args, nargs, "create_dynamic",
310 1, 2,
311 &spec, &file)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100312 goto exit;
313 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000314 return_value = _imp_create_dynamic_impl(module, spec, file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400315
316exit:
317 return return_value;
318}
319
320#endif /* defined(HAVE_DYNAMIC_LOADING) */
321
Nick Coghland5cacbb2015-05-23 22:24:10 +1000322#if defined(HAVE_DYNAMIC_LOADING)
323
324PyDoc_STRVAR(_imp_exec_dynamic__doc__,
325"exec_dynamic($module, mod, /)\n"
326"--\n"
327"\n"
328"Initialize an extension module.");
329
330#define _IMP_EXEC_DYNAMIC_METHODDEF \
331 {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__},
332
333static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300334_imp_exec_dynamic_impl(PyObject *module, PyObject *mod);
Nick Coghland5cacbb2015-05-23 22:24:10 +1000335
336static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300337_imp_exec_dynamic(PyObject *module, PyObject *mod)
Nick Coghland5cacbb2015-05-23 22:24:10 +1000338{
339 PyObject *return_value = NULL;
340 int _return_value;
341
342 _return_value = _imp_exec_dynamic_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300343 if ((_return_value == -1) && PyErr_Occurred()) {
Nick Coghland5cacbb2015-05-23 22:24:10 +1000344 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300345 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000346 return_value = PyLong_FromLong((long)_return_value);
347
348exit:
349 return return_value;
350}
351
352#endif /* defined(HAVE_DYNAMIC_LOADING) */
353
Larry Hastings1df0b352015-08-24 19:53:56 -0700354PyDoc_STRVAR(_imp_exec_builtin__doc__,
355"exec_builtin($module, mod, /)\n"
356"--\n"
357"\n"
Larry Hastings01b1ff62015-08-24 20:23:27 -0700358"Initialize a built-in module.");
Larry Hastings1df0b352015-08-24 19:53:56 -0700359
360#define _IMP_EXEC_BUILTIN_METHODDEF \
361 {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__},
362
363static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300364_imp_exec_builtin_impl(PyObject *module, PyObject *mod);
Larry Hastings1df0b352015-08-24 19:53:56 -0700365
366static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300367_imp_exec_builtin(PyObject *module, PyObject *mod)
Larry Hastings1df0b352015-08-24 19:53:56 -0700368{
369 PyObject *return_value = NULL;
370 int _return_value;
371
372 _return_value = _imp_exec_builtin_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300373 if ((_return_value == -1) && PyErr_Occurred()) {
Larry Hastings1df0b352015-08-24 19:53:56 -0700374 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300375 }
Larry Hastings1df0b352015-08-24 19:53:56 -0700376 return_value = PyLong_FromLong((long)_return_value);
377
378exit:
379 return return_value;
380}
381
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800382PyDoc_STRVAR(_imp_source_hash__doc__,
383"source_hash($module, /, key, source)\n"
384"--\n"
385"\n");
386
387#define _IMP_SOURCE_HASH_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200388 {"source_hash", (PyCFunction)(void(*)(void))_imp_source_hash, METH_FASTCALL|METH_KEYWORDS, _imp_source_hash__doc__},
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800389
390static PyObject *
391_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source);
392
393static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200394_imp_source_hash(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800395{
396 PyObject *return_value = NULL;
397 static const char * const _keywords[] = {"key", "source", NULL};
398 static _PyArg_Parser _parser = {"ly*:source_hash", _keywords, 0};
399 long key;
400 Py_buffer source = {NULL, NULL};
401
402 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
403 &key, &source)) {
404 goto exit;
405 }
406 return_value = _imp_source_hash_impl(module, key, &source);
407
408exit:
409 /* Cleanup for source */
410 if (source.obj) {
411 PyBuffer_Release(&source);
412 }
413
414 return return_value;
415}
416
Nick Coghland5cacbb2015-05-23 22:24:10 +1000417#ifndef _IMP_CREATE_DYNAMIC_METHODDEF
418 #define _IMP_CREATE_DYNAMIC_METHODDEF
419#endif /* !defined(_IMP_CREATE_DYNAMIC_METHODDEF) */
420
421#ifndef _IMP_EXEC_DYNAMIC_METHODDEF
422 #define _IMP_EXEC_DYNAMIC_METHODDEF
423#endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200424/*[clinic end generated code: output=d8be58c9541122f1 input=a9049054013a1b77]*/