blob: 27b83ecc00a7ff75f21369c6de757e9498277b6e [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 \
Victor Stinner259f0e42017-01-17 01:35:17 +010078 {"_fix_co_filename", (PyCFunction)_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 Storchaka5dee6552016-06-09 16:16:06 +0300146 if (!PyArg_Parse(arg, "U:init_frozen", &name)) {
Brett Cannonfd4d0502014-05-30 11:21:14 -0400147 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300148 }
Brett Cannonfd4d0502014-05-30 11:21:14 -0400149 return_value = _imp_init_frozen_impl(module, name);
150
151exit:
152 return return_value;
153}
154
155PyDoc_STRVAR(_imp_get_frozen_object__doc__,
156"get_frozen_object($module, name, /)\n"
157"--\n"
158"\n"
159"Create a code object for a frozen module.");
160
161#define _IMP_GET_FROZEN_OBJECT_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300162 {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400163
164static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300165_imp_get_frozen_object_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400166
167static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300168_imp_get_frozen_object(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400169{
170 PyObject *return_value = NULL;
171 PyObject *name;
172
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300173 if (!PyArg_Parse(arg, "U:get_frozen_object", &name)) {
Brett Cannonfd4d0502014-05-30 11:21:14 -0400174 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300175 }
Brett Cannonfd4d0502014-05-30 11:21:14 -0400176 return_value = _imp_get_frozen_object_impl(module, name);
177
178exit:
179 return return_value;
180}
181
182PyDoc_STRVAR(_imp_is_frozen_package__doc__,
183"is_frozen_package($module, name, /)\n"
184"--\n"
185"\n"
186"Returns True if the module name is of a frozen package.");
187
188#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300189 {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400190
191static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300192_imp_is_frozen_package_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400193
194static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300195_imp_is_frozen_package(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400196{
197 PyObject *return_value = NULL;
198 PyObject *name;
199
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300200 if (!PyArg_Parse(arg, "U:is_frozen_package", &name)) {
Brett Cannonfd4d0502014-05-30 11:21:14 -0400201 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300202 }
Brett Cannonfd4d0502014-05-30 11:21:14 -0400203 return_value = _imp_is_frozen_package_impl(module, name);
204
205exit:
206 return return_value;
207}
208
209PyDoc_STRVAR(_imp_is_builtin__doc__,
210"is_builtin($module, name, /)\n"
211"--\n"
212"\n"
213"Returns True if the module name corresponds to a built-in module.");
214
215#define _IMP_IS_BUILTIN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300216 {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400217
218static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300219_imp_is_builtin_impl(PyObject *module, PyObject *name);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400220
221static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300222_imp_is_builtin(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400223{
224 PyObject *return_value = NULL;
225 PyObject *name;
226
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300227 if (!PyArg_Parse(arg, "U:is_builtin", &name)) {
Brett Cannonfd4d0502014-05-30 11:21:14 -0400228 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300229 }
Brett Cannonfd4d0502014-05-30 11:21:14 -0400230 return_value = _imp_is_builtin_impl(module, name);
231
232exit:
233 return return_value;
234}
235
236PyDoc_STRVAR(_imp_is_frozen__doc__,
237"is_frozen($module, name, /)\n"
238"--\n"
239"\n"
240"Returns True if the module name corresponds to a frozen module.");
241
242#define _IMP_IS_FROZEN_METHODDEF \
Serhiy Storchaka92e8af62015-04-04 00:12:11 +0300243 {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400244
245static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300246_imp_is_frozen_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_frozen(PyObject *module, PyObject *arg)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400250{
251 PyObject *return_value = NULL;
252 PyObject *name;
253
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300254 if (!PyArg_Parse(arg, "U:is_frozen", &name)) {
Brett Cannonfd4d0502014-05-30 11:21:14 -0400255 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300256 }
Brett Cannonfd4d0502014-05-30 11:21:14 -0400257 return_value = _imp_is_frozen_impl(module, name);
258
259exit:
260 return return_value;
261}
262
263#if defined(HAVE_DYNAMIC_LOADING)
264
Nick Coghland5cacbb2015-05-23 22:24:10 +1000265PyDoc_STRVAR(_imp_create_dynamic__doc__,
266"create_dynamic($module, spec, file=None, /)\n"
Brett Cannonfd4d0502014-05-30 11:21:14 -0400267"--\n"
268"\n"
Nick Coghland5cacbb2015-05-23 22:24:10 +1000269"Create an extension module.");
Brett Cannonfd4d0502014-05-30 11:21:14 -0400270
Nick Coghland5cacbb2015-05-23 22:24:10 +1000271#define _IMP_CREATE_DYNAMIC_METHODDEF \
Victor Stinner0c4a8282017-01-17 02:21:47 +0100272 {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_FASTCALL, _imp_create_dynamic__doc__},
Brett Cannonfd4d0502014-05-30 11:21:14 -0400273
274static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300275_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400276
277static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200278_imp_create_dynamic(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Brett Cannonfd4d0502014-05-30 11:21:14 -0400279{
280 PyObject *return_value = NULL;
Nick Coghland5cacbb2015-05-23 22:24:10 +1000281 PyObject *spec;
Brett Cannonfd4d0502014-05-30 11:21:14 -0400282 PyObject *file = NULL;
283
Sylvain74453812017-06-10 06:51:48 +0200284 if (!_PyArg_UnpackStack(args, nargs, "create_dynamic",
285 1, 2,
286 &spec, &file)) {
Victor Stinner0c4a8282017-01-17 02:21:47 +0100287 goto exit;
288 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000289 return_value = _imp_create_dynamic_impl(module, spec, file);
Brett Cannonfd4d0502014-05-30 11:21:14 -0400290
291exit:
292 return return_value;
293}
294
295#endif /* defined(HAVE_DYNAMIC_LOADING) */
296
Nick Coghland5cacbb2015-05-23 22:24:10 +1000297#if defined(HAVE_DYNAMIC_LOADING)
298
299PyDoc_STRVAR(_imp_exec_dynamic__doc__,
300"exec_dynamic($module, mod, /)\n"
301"--\n"
302"\n"
303"Initialize an extension module.");
304
305#define _IMP_EXEC_DYNAMIC_METHODDEF \
306 {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__},
307
308static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300309_imp_exec_dynamic_impl(PyObject *module, PyObject *mod);
Nick Coghland5cacbb2015-05-23 22:24:10 +1000310
311static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300312_imp_exec_dynamic(PyObject *module, PyObject *mod)
Nick Coghland5cacbb2015-05-23 22:24:10 +1000313{
314 PyObject *return_value = NULL;
315 int _return_value;
316
317 _return_value = _imp_exec_dynamic_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300318 if ((_return_value == -1) && PyErr_Occurred()) {
Nick Coghland5cacbb2015-05-23 22:24:10 +1000319 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300320 }
Nick Coghland5cacbb2015-05-23 22:24:10 +1000321 return_value = PyLong_FromLong((long)_return_value);
322
323exit:
324 return return_value;
325}
326
327#endif /* defined(HAVE_DYNAMIC_LOADING) */
328
Larry Hastings1df0b352015-08-24 19:53:56 -0700329PyDoc_STRVAR(_imp_exec_builtin__doc__,
330"exec_builtin($module, mod, /)\n"
331"--\n"
332"\n"
Larry Hastings01b1ff62015-08-24 20:23:27 -0700333"Initialize a built-in module.");
Larry Hastings1df0b352015-08-24 19:53:56 -0700334
335#define _IMP_EXEC_BUILTIN_METHODDEF \
336 {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__},
337
338static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300339_imp_exec_builtin_impl(PyObject *module, PyObject *mod);
Larry Hastings1df0b352015-08-24 19:53:56 -0700340
341static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300342_imp_exec_builtin(PyObject *module, PyObject *mod)
Larry Hastings1df0b352015-08-24 19:53:56 -0700343{
344 PyObject *return_value = NULL;
345 int _return_value;
346
347 _return_value = _imp_exec_builtin_impl(module, mod);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300348 if ((_return_value == -1) && PyErr_Occurred()) {
Larry Hastings1df0b352015-08-24 19:53:56 -0700349 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300350 }
Larry Hastings1df0b352015-08-24 19:53:56 -0700351 return_value = PyLong_FromLong((long)_return_value);
352
353exit:
354 return return_value;
355}
356
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800357PyDoc_STRVAR(_imp_source_hash__doc__,
358"source_hash($module, /, key, source)\n"
359"--\n"
360"\n");
361
362#define _IMP_SOURCE_HASH_METHODDEF \
363 {"source_hash", (PyCFunction)_imp_source_hash, METH_FASTCALL|METH_KEYWORDS, _imp_source_hash__doc__},
364
365static PyObject *
366_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source);
367
368static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200369_imp_source_hash(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Benjamin Peterson42aa93b2017-12-09 10:26:52 -0800370{
371 PyObject *return_value = NULL;
372 static const char * const _keywords[] = {"key", "source", NULL};
373 static _PyArg_Parser _parser = {"ly*:source_hash", _keywords, 0};
374 long key;
375 Py_buffer source = {NULL, NULL};
376
377 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
378 &key, &source)) {
379 goto exit;
380 }
381 return_value = _imp_source_hash_impl(module, key, &source);
382
383exit:
384 /* Cleanup for source */
385 if (source.obj) {
386 PyBuffer_Release(&source);
387 }
388
389 return return_value;
390}
391
Nick Coghland5cacbb2015-05-23 22:24:10 +1000392#ifndef _IMP_CREATE_DYNAMIC_METHODDEF
393 #define _IMP_CREATE_DYNAMIC_METHODDEF
394#endif /* !defined(_IMP_CREATE_DYNAMIC_METHODDEF) */
395
396#ifndef _IMP_EXEC_DYNAMIC_METHODDEF
397 #define _IMP_EXEC_DYNAMIC_METHODDEF
398#endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200399/*[clinic end generated code: output=f0660cd1de6b3a73 input=a9049054013a1b77]*/