blob: eb5aeac55461a9aaec746ace9fc6e7970f835048 [file] [log] [blame]
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00001/* Module definition and import implementation */
2
Guido van Rossum79f25d91997-04-29 20:08:16 +00003#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00004
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00006#undef Yield /* undefine macro conflicting with winbase.h */
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08007#include "internal/hash.h"
8#include "internal/import.h"
Eric Snow2ebc5ce2017-09-07 23:51:28 -06009#include "internal/pystate.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Antoine Pitroubc07a5c2012-07-08 12:01:27 +020013#include "frameobject.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000014#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000015#include "importdl.h"
Christian Heimes3d2b4072017-09-30 00:53:19 +020016#include "pydtrace.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000022extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000023#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Barry Warsaw28a691b2010-04-17 00:19:56 +000025#define CACHEDIR "__pycache__"
Guido van Rossum96774c12000-05-01 20:19:08 +000026
Victor Stinner95872862011-03-07 18:20:56 +010027/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +000028static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000029
Guido van Rossum771c6c81997-10-31 18:37:24 +000030/* This table is defined in config.c: */
31extern struct _inittab _PyImport_Inittab[];
32
33struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Victor Stinner92a3c6f2017-12-06 18:12:59 +010034static struct _inittab *inittab_copy = NULL;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000035
Brett Cannon4caa61d2014-01-09 19:03:32 -050036/*[clinic input]
37module _imp
38[clinic start generated code]*/
Serhiy Storchaka1009bf12015-04-03 23:53:51 +030039/*[clinic end generated code: output=da39a3ee5e6b4b0d input=9c332475d8686284]*/
Brett Cannonfd4d0502014-05-30 11:21:14 -040040
41#include "clinic/import.c.h"
Brett Cannon4caa61d2014-01-09 19:03:32 -050042
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000044
Victor Stinnerf7e5b562017-11-15 15:48:08 -080045_PyInitError
Victor Stinner672b6ba2017-12-06 17:25:50 +010046_PyImport_Init(PyInterpreterState *interp)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000047{
Serhiy Storchaka013bb912014-02-10 18:21:34 +020048 interp->builtins_copy = PyDict_Copy(interp->builtins);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080049 if (interp->builtins_copy == NULL) {
50 return _Py_INIT_ERR("Can't backup builtins dict");
51 }
52 return _Py_INIT_OK();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000053}
54
Victor Stinnerf7e5b562017-11-15 15:48:08 -080055_PyInitError
Just van Rossum52e14d62002-12-30 22:08:05 +000056_PyImportHooks_Init(void)
57{
Brett Cannonfd074152012-04-14 14:10:13 -040058 PyObject *v, *path_hooks = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000059 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +000060
Brett Cannonfd074152012-04-14 14:10:13 -040061 /* adding sys.path_hooks and sys.path_importer_cache */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000062 v = PyList_New(0);
63 if (v == NULL)
64 goto error;
65 err = PySys_SetObject("meta_path", v);
66 Py_DECREF(v);
67 if (err)
68 goto error;
69 v = PyDict_New();
70 if (v == NULL)
71 goto error;
72 err = PySys_SetObject("path_importer_cache", v);
73 Py_DECREF(v);
74 if (err)
75 goto error;
76 path_hooks = PyList_New(0);
77 if (path_hooks == NULL)
78 goto error;
79 err = PySys_SetObject("path_hooks", path_hooks);
80 if (err) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -080081 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 }
Brett Cannonfd074152012-04-14 14:10:13 -040083 Py_DECREF(path_hooks);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080084 return _Py_INIT_OK();
85
86 error:
87 PyErr_Print();
88 return _Py_INIT_ERR("initializing sys.meta_path, sys.path_hooks, "
89 "or path_importer_cache failed");
Brett Cannonfd074152012-04-14 14:10:13 -040090}
91
Victor Stinnerf7e5b562017-11-15 15:48:08 -080092_PyInitError
Brett Cannonfd074152012-04-14 14:10:13 -040093_PyImportZip_Init(void)
94{
95 PyObject *path_hooks, *zimpimport;
96 int err = 0;
97
98 path_hooks = PySys_GetObject("path_hooks");
Victor Stinner1e53bba2013-07-16 22:26:05 +020099 if (path_hooks == NULL) {
100 PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks");
Brett Cannonfd074152012-04-14 14:10:13 -0400101 goto error;
Victor Stinner1e53bba2013-07-16 22:26:05 +0200102 }
Brett Cannonfd074152012-04-14 14:10:13 -0400103
104 if (Py_VerboseFlag)
105 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 zimpimport = PyImport_ImportModule("zipimport");
108 if (zimpimport == NULL) {
109 PyErr_Clear(); /* No zip import module -- okay */
110 if (Py_VerboseFlag)
111 PySys_WriteStderr("# can't import zipimport\n");
112 }
113 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200114 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200115 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
116 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 Py_DECREF(zimpimport);
118 if (zipimporter == NULL) {
119 PyErr_Clear(); /* No zipimporter object -- okay */
120 if (Py_VerboseFlag)
121 PySys_WriteStderr(
122 "# can't import zipimport.zipimporter\n");
123 }
124 else {
Brett Cannon8923a4d2012-04-24 22:03:46 -0400125 /* sys.path_hooks.insert(0, zipimporter) */
126 err = PyList_Insert(path_hooks, 0, zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400128 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400130 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000131 if (Py_VerboseFlag)
132 PySys_WriteStderr(
133 "# installed zipimport hook\n");
134 }
135 }
Brett Cannonfd074152012-04-14 14:10:13 -0400136
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800137 return _Py_INIT_OK();
Brett Cannonfd074152012-04-14 14:10:13 -0400138
139 error:
140 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800141 return _Py_INIT_ERR("initializing zipimport failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000142}
143
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000144/* Locking primitives to prevent parallel imports of the same module
145 in different threads to return with a partially loaded module.
146 These calls are serialized by the global interpreter lock. */
147
Guido van Rossum49b56061998-10-01 20:42:43 +0000148#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000149
Guido van Rossum65d5b571998-12-21 19:32:43 +0000150static PyThread_type_lock import_lock = 0;
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200151static unsigned long import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000152static int import_lock_level = 0;
153
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000154void
155_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000156{
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200157 unsigned long me = PyThread_get_thread_ident();
158 if (me == PYTHREAD_INVALID_THREAD_ID)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000159 return; /* Too bad */
160 if (import_lock == NULL) {
161 import_lock = PyThread_allocate_lock();
162 if (import_lock == NULL)
163 return; /* Nothing much we can do. */
164 }
165 if (import_lock_thread == me) {
166 import_lock_level++;
167 return;
168 }
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200169 if (import_lock_thread != PYTHREAD_INVALID_THREAD_ID ||
170 !PyThread_acquire_lock(import_lock, 0))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 {
172 PyThreadState *tstate = PyEval_SaveThread();
173 PyThread_acquire_lock(import_lock, 1);
174 PyEval_RestoreThread(tstate);
175 }
Antoine Pitrou202b6062012-12-18 22:18:17 +0100176 assert(import_lock_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 import_lock_thread = me;
178 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000179}
180
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000181int
182_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000183{
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200184 unsigned long me = PyThread_get_thread_ident();
185 if (me == PYTHREAD_INVALID_THREAD_ID || import_lock == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 return 0; /* Too bad */
187 if (import_lock_thread != me)
188 return -1;
189 import_lock_level--;
Antoine Pitrou202b6062012-12-18 22:18:17 +0100190 assert(import_lock_level >= 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 if (import_lock_level == 0) {
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200192 import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 PyThread_release_lock(import_lock);
194 }
195 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000196}
197
Antoine Pitrouf7ecfac2017-05-28 11:35:14 +0200198/* This function is called from PyOS_AfterFork_Child to ensure that newly
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000199 created child processes do not share locks with the parent.
200 We now acquire the import lock around fork() calls but on some platforms
201 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000202
203void
204_PyImport_ReInitLock(void)
205{
Christian Heimes418fd742015-04-19 21:08:42 +0200206 if (import_lock != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000207 import_lock = PyThread_allocate_lock();
Christian Heimes418fd742015-04-19 21:08:42 +0200208 if (import_lock == NULL) {
209 Py_FatalError("PyImport_ReInitLock failed to create a new lock");
210 }
211 }
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000212 if (import_lock_level > 1) {
213 /* Forked as a side effect of import */
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200214 unsigned long me = PyThread_get_thread_ident();
Brett Cannone4710cf2012-11-15 21:39:36 -0500215 /* The following could fail if the lock is already held, but forking as
216 a side-effect of an import is a) rare, b) nuts, and c) difficult to
217 do thanks to the lock only being held when doing individual module
218 locks per import. */
219 PyThread_acquire_lock(import_lock, NOWAIT_LOCK);
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000220 import_lock_thread = me;
221 import_lock_level--;
222 } else {
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200223 import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000224 import_lock_level = 0;
225 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000226}
227
Brett Cannon4caa61d2014-01-09 19:03:32 -0500228/*[clinic input]
229_imp.lock_held
230
231Return True if the import lock is currently held, else False.
232
233On platforms without threads, return False.
234[clinic start generated code]*/
235
Brett Cannon4caa61d2014-01-09 19:03:32 -0500236static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300237_imp_lock_held_impl(PyObject *module)
238/*[clinic end generated code: output=8b89384b5e1963fc input=9b088f9b217d9bdf]*/
Tim Peters69232342001-08-30 05:16:13 +0000239{
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200240 return PyBool_FromLong(import_lock_thread != PYTHREAD_INVALID_THREAD_ID);
Tim Peters69232342001-08-30 05:16:13 +0000241}
242
Brett Cannon4caa61d2014-01-09 19:03:32 -0500243/*[clinic input]
244_imp.acquire_lock
245
246Acquires the interpreter's import lock for the current thread.
247
248This lock should be used by import hooks to ensure thread-safety when importing
249modules. On platforms without threads, this function does nothing.
250[clinic start generated code]*/
251
Brett Cannon4caa61d2014-01-09 19:03:32 -0500252static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300253_imp_acquire_lock_impl(PyObject *module)
254/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000256 _PyImport_AcquireLock();
Serhiy Storchaka228b12e2017-01-23 09:47:21 +0200257 Py_RETURN_NONE;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000258}
259
Brett Cannon4caa61d2014-01-09 19:03:32 -0500260/*[clinic input]
261_imp.release_lock
262
263Release the interpreter's import lock.
264
265On platforms without threads, this function does nothing.
266[clinic start generated code]*/
267
Brett Cannon4caa61d2014-01-09 19:03:32 -0500268static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300269_imp_release_lock_impl(PyObject *module)
270/*[clinic end generated code: output=7faab6d0be178b0a input=934fb11516dd778b]*/
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000271{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 if (_PyImport_ReleaseLock() < 0) {
273 PyErr_SetString(PyExc_RuntimeError,
274 "not holding the import lock");
275 return NULL;
276 }
Serhiy Storchaka228b12e2017-01-23 09:47:21 +0200277 Py_RETURN_NONE;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000278}
279
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100280void
281_PyImport_Fini(void)
282{
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200283 Py_CLEAR(extensions);
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100284 if (import_lock != NULL) {
285 PyThread_free_lock(import_lock);
286 import_lock = NULL;
287 }
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100288}
289
Victor Stinner92a3c6f2017-12-06 18:12:59 +0100290void
291_PyImport_Fini2(void)
292{
293 /* Use the same memory allocator than PyImport_ExtendInittab(). */
294 PyMemAllocatorEx old_alloc;
295 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
296
297 /* Free memory allocated by PyImport_ExtendInittab() */
298 PyMem_RawFree(inittab_copy);
299
300 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
301}
302
Guido van Rossum25ce5661997-08-02 03:10:38 +0000303/* Helper for sys */
304
305PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000306PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000307{
Eric Snow93c92f72017-09-13 23:46:04 -0700308 PyInterpreterState *interp = PyThreadState_GET()->interp;
Eric Snow3f9eee62017-09-15 16:35:20 -0600309 if (interp->modules == NULL) {
Eric Snow93c92f72017-09-13 23:46:04 -0700310 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
Eric Snow3f9eee62017-09-15 16:35:20 -0600311 }
Eric Snow93c92f72017-09-13 23:46:04 -0700312 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000313}
314
Eric Snowd393c1b2017-09-14 12:18:12 -0600315/* In some corner cases it is important to be sure that the import
316 machinery has been initialized (or not cleaned up yet). For
317 example, see issue #4236 and PyModule_Create2(). */
318
319int
320_PyImport_IsInitialized(PyInterpreterState *interp)
321{
322 if (interp->modules == NULL)
323 return 0;
324 return 1;
325}
Guido van Rossum3f5da241990-12-20 15:06:42 +0000326
Eric Snow3f9eee62017-09-15 16:35:20 -0600327PyObject *
328_PyImport_GetModuleId(struct _Py_Identifier *nameid)
329{
330 PyObject *name = _PyUnicode_FromId(nameid); /* borrowed */
331 if (name == NULL) {
332 return NULL;
333 }
334 return PyImport_GetModule(name);
335}
336
337int
338_PyImport_SetModule(PyObject *name, PyObject *m)
339{
340 PyObject *modules = PyImport_GetModuleDict();
341 return PyObject_SetItem(modules, name, m);
342}
343
344int
345_PyImport_SetModuleString(const char *name, PyObject *m)
346{
347 PyObject *modules = PyImport_GetModuleDict();
348 return PyMapping_SetItemString(modules, name, m);
349}
350
351PyObject *
352PyImport_GetModule(PyObject *name)
353{
354 PyObject *m;
355 PyObject *modules = PyImport_GetModuleDict();
356 if (modules == NULL) {
357 PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
358 return NULL;
359 }
360 Py_INCREF(modules);
361 if (PyDict_CheckExact(modules)) {
362 m = PyDict_GetItemWithError(modules, name); /* borrowed */
363 Py_XINCREF(m);
364 }
365 else {
366 m = PyObject_GetItem(modules, name);
367 if (PyErr_ExceptionMatches(PyExc_KeyError)) {
368 PyErr_Clear();
369 }
370 }
371 Py_DECREF(modules);
372 return m;
373}
374
375
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000376/* List of names to clear in sys */
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200377static const char * const sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 "path", "argv", "ps1", "ps2",
379 "last_type", "last_value", "last_traceback",
380 "path_hooks", "path_importer_cache", "meta_path",
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200381 "__interactivehook__",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 /* misc stuff */
383 "flags", "float_info",
384 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000385};
386
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200387static const char * const sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 "stdin", "__stdin__",
389 "stdout", "__stdout__",
390 "stderr", "__stderr__",
391 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000392};
393
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000394/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000395
Guido van Rossum3f5da241990-12-20 15:06:42 +0000396void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000398{
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200399 Py_ssize_t pos;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 PyObject *key, *value, *dict;
401 PyInterpreterState *interp = PyThreadState_GET()->interp;
Eric Snowd393c1b2017-09-14 12:18:12 -0600402 PyObject *modules = PyImport_GetModuleDict();
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200403 PyObject *weaklist = NULL;
Serhiy Storchaka2d06e842015-12-25 19:53:18 +0200404 const char * const *p;
Guido van Rossum758eec01998-01-19 21:58:26 +0000405
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 if (modules == NULL)
407 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000409 /* Delete some special variables first. These are common
410 places where user values hide and people complain when their
411 destructors fail. Since the modules containing them are
412 deleted *last* of all, they would come too late in the normal
413 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000414
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200415 /* XXX Perhaps these precautions are obsolete. Who knows? */
416
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200417 if (Py_VerboseFlag)
418 PySys_WriteStderr("# clear builtins._\n");
419 PyDict_SetItemString(interp->builtins, "_", Py_None);
420
421 for (p = sys_deletes; *p != NULL; p++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 if (Py_VerboseFlag)
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200423 PySys_WriteStderr("# clear sys.%s\n", *p);
424 PyDict_SetItemString(interp->sysdict, *p, Py_None);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 }
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200426 for (p = sys_files; *p != NULL; p+=2) {
427 if (Py_VerboseFlag)
428 PySys_WriteStderr("# restore sys.%s\n", *p);
429 value = PyDict_GetItemString(interp->sysdict, *(p+1));
430 if (value == NULL)
431 value = Py_None;
432 PyDict_SetItemString(interp->sysdict, *p, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000434
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200435 /* We prepare a list which will receive (name, weakref) tuples of
436 modules when they are removed from sys.modules. The name is used
437 for diagnosis messages (in verbose mode), while the weakref helps
438 detect those modules which have been held alive. */
439 weaklist = PyList_New(0);
Antoine Pitrou79ba3882013-08-06 22:50:15 +0200440 if (weaklist == NULL)
441 PyErr_Clear();
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200442
Antoine Pitrou79ba3882013-08-06 22:50:15 +0200443#define STORE_MODULE_WEAKREF(name, mod) \
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200444 if (weaklist != NULL) { \
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200445 PyObject *wr = PyWeakref_NewRef(mod, NULL); \
446 if (name && wr) { \
447 PyObject *tup = PyTuple_Pack(2, name, wr); \
448 PyList_Append(weaklist, tup); \
449 Py_XDECREF(tup); \
450 } \
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200451 Py_XDECREF(wr); \
452 if (PyErr_Occurred()) \
453 PyErr_Clear(); \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600455#define CLEAR_MODULE(name, mod) \
456 if (PyModule_Check(mod)) { \
457 if (Py_VerboseFlag && PyUnicode_Check(name)) \
458 PySys_FormatStderr("# cleanup[2] removing %U\n", name); \
459 STORE_MODULE_WEAKREF(name, mod); \
460 PyObject_SetItem(modules, name, Py_None); \
461 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000462
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200463 /* Remove all modules from sys.modules, hoping that garbage collection
464 can reclaim most of them. */
Eric Snow3f9eee62017-09-15 16:35:20 -0600465 if (PyDict_CheckExact(modules)) {
466 pos = 0;
467 while (PyDict_Next(modules, &pos, &key, &value)) {
468 CLEAR_MODULE(key, value);
469 }
470 }
471 else {
472 PyObject *iterator = PyObject_GetIter(modules);
473 if (iterator == NULL) {
474 PyErr_Clear();
475 }
476 else {
477 while ((key = PyIter_Next(iterator))) {
478 value = PyObject_GetItem(modules, key);
479 if (value == NULL) {
480 PyErr_Clear();
481 continue;
482 }
483 CLEAR_MODULE(key, value);
484 Py_DECREF(value);
485 Py_DECREF(key);
486 }
487 Py_DECREF(iterator);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000488 }
489 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000490
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200491 /* Clear the modules dict. */
Eric Snow3f9eee62017-09-15 16:35:20 -0600492 if (PyDict_CheckExact(modules)) {
493 PyDict_Clear(modules);
494 }
495 else {
496 _Py_IDENTIFIER(clear);
497 if (_PyObject_CallMethodId(modules, &PyId_clear, "") == NULL)
498 PyErr_Clear();
499 }
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200500 /* Restore the original builtins dict, to ensure that any
501 user data gets cleared. */
502 dict = PyDict_Copy(interp->builtins);
503 if (dict == NULL)
504 PyErr_Clear();
505 PyDict_Clear(interp->builtins);
506 if (PyDict_Update(interp->builtins, interp->builtins_copy))
507 PyErr_Clear();
508 Py_XDECREF(dict);
Antoine Pitrou40322e62013-08-11 00:30:09 +0200509 /* Clear module dict copies stored in the interpreter state */
510 _PyState_ClearModules();
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200511 /* Collect references */
512 _PyGC_CollectNoFail();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200513 /* Dump GC stats before it's too late, since it uses the warnings
514 machinery. */
515 _PyGC_DumpShutdownStats();
516
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200517 /* Now, if there are any modules left alive, clear their globals to
518 minimize potential leaks. All C extension modules actually end
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200519 up here, since they are kept alive in the interpreter state.
520
521 The special treatment of "builtins" here is because even
522 when it's not referenced as a module, its dictionary is
523 referenced by almost every module's __builtins__. Since
524 deleting a module clears its dictionary (even if there are
525 references left to it), we need to delete the "builtins"
526 module last. Likewise, we don't delete sys until the very
527 end because it is implicitly referenced (e.g. by print). */
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200528 if (weaklist != NULL) {
529 Py_ssize_t i, n;
530 n = PyList_GET_SIZE(weaklist);
531 for (i = 0; i < n; i++) {
532 PyObject *tup = PyList_GET_ITEM(weaklist, i);
Antoine Pitrou79ba3882013-08-06 22:50:15 +0200533 PyObject *name = PyTuple_GET_ITEM(tup, 0);
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200534 PyObject *mod = PyWeakref_GET_OBJECT(PyTuple_GET_ITEM(tup, 1));
535 if (mod == Py_None)
536 continue;
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200537 assert(PyModule_Check(mod));
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200538 dict = PyModule_GetDict(mod);
539 if (dict == interp->builtins || dict == interp->sysdict)
540 continue;
541 Py_INCREF(mod);
Antoine Pitrou79ba3882013-08-06 22:50:15 +0200542 if (Py_VerboseFlag && PyUnicode_Check(name))
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200543 PySys_FormatStderr("# cleanup[3] wiping %U\n", name);
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200544 _PyModule_Clear(mod);
545 Py_DECREF(mod);
Antoine Pitrou070cb3c2013-05-08 13:23:25 +0200546 }
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200547 Py_DECREF(weaklist);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000549
Serhiy Storchaka013bb912014-02-10 18:21:34 +0200550 /* Next, delete sys and builtins (in that order) */
551 if (Py_VerboseFlag)
552 PySys_FormatStderr("# cleanup[3] wiping sys\n");
553 _PyModule_ClearDict(interp->sysdict);
554 if (Py_VerboseFlag)
555 PySys_FormatStderr("# cleanup[3] wiping builtins\n");
556 _PyModule_ClearDict(interp->builtins);
557
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200558 /* Clear and delete the modules directory. Actual modules will
559 still be there only if imported during the execution of some
560 destructor. */
Eric Snow93c92f72017-09-13 23:46:04 -0700561 interp->modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000562 Py_DECREF(modules);
Antoine Pitroudcedaf62013-07-31 23:14:08 +0200563
564 /* Once more */
565 _PyGC_CollectNoFail();
566
567#undef STORE_MODULE_WEAKREF
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000568}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000569
570
Barry Warsaw28a691b2010-04-17 00:19:56 +0000571/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000572
573long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000574PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575{
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200576 long res;
Brett Cannon77b2abd2012-07-09 16:09:00 -0400577 PyInterpreterState *interp = PyThreadState_Get()->interp;
Eric Snow32439d62015-05-02 19:15:18 -0600578 PyObject *external, *pyc_magic;
579
580 external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
581 if (external == NULL)
582 return -1;
583 pyc_magic = PyObject_GetAttrString(external, "_RAW_MAGIC_NUMBER");
584 Py_DECREF(external);
Brett Cannon77b2abd2012-07-09 16:09:00 -0400585 if (pyc_magic == NULL)
586 return -1;
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200587 res = PyLong_AsLong(pyc_magic);
Benjamin Peterson66f36592012-07-09 22:21:55 -0700588 Py_DECREF(pyc_magic);
589 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590}
591
592
Brett Cannon3adc7b72012-07-09 14:22:12 -0400593extern const char * _PySys_ImplCacheTag;
594
Barry Warsaw28a691b2010-04-17 00:19:56 +0000595const char *
596PyImport_GetMagicTag(void)
597{
Brett Cannon3adc7b72012-07-09 14:22:12 -0400598 return _PySys_ImplCacheTag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000599}
600
Brett Cannon98979b82012-07-02 15:13:11 -0400601
Guido van Rossum25ce5661997-08-02 03:10:38 +0000602/* Magic for extension modules (built-in as well as dynamically
603 loaded). To prevent initializing an extension module more than
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200604 once, we keep a static dictionary 'extensions' keyed by the tuple
605 (module name, module name) (for built-in modules) or by
606 (filename, module name) (for dynamically loaded modules), containing these
607 modules. A copy of the module's dictionary is stored by calling
608 _PyImport_FixupExtensionObject() immediately after the module initialization
609 function succeeds. A copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100610 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000612 Modules which do support multiple initialization set their m_size
613 field to a non-negative number (indicating the size of the
614 module-specific state). They are still recorded in the extensions
615 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000616*/
617
618int
Victor Stinner95872862011-03-07 18:20:56 +0100619_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
Eric Snowd393c1b2017-09-14 12:18:12 -0600620 PyObject *filename, PyObject *modules)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621{
Eric Snowd393c1b2017-09-14 12:18:12 -0600622 PyObject *dict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 struct PyModuleDef *def;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500624 int res;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000625 if (extensions == NULL) {
626 extensions = PyDict_New();
627 if (extensions == NULL)
628 return -1;
629 }
630 if (mod == NULL || !PyModule_Check(mod)) {
631 PyErr_BadInternalCall();
632 return -1;
633 }
634 def = PyModule_GetDef(mod);
635 if (!def) {
636 PyErr_BadInternalCall();
637 return -1;
638 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600639 if (PyObject_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 return -1;
641 if (_PyState_AddModule(mod, def) < 0) {
Eric Snow3f9eee62017-09-15 16:35:20 -0600642 PyMapping_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 return -1;
644 }
645 if (def->m_size == -1) {
646 if (def->m_base.m_copy) {
647 /* Somebody already imported the module,
648 likely under a different name.
649 XXX this should really not happen. */
Serhiy Storchaka505ff752014-02-09 13:33:53 +0200650 Py_CLEAR(def->m_base.m_copy);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 }
652 dict = PyModule_GetDict(mod);
653 if (dict == NULL)
654 return -1;
655 def->m_base.m_copy = PyDict_Copy(dict);
656 if (def->m_base.m_copy == NULL)
657 return -1;
658 }
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500659 key = PyTuple_Pack(2, filename, name);
660 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200661 return -1;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500662 res = PyDict_SetItem(extensions, key, (PyObject *)def);
663 Py_DECREF(key);
664 if (res < 0)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200665 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000667}
668
Victor Stinner49d3f252010-10-17 01:24:53 +0000669int
Eric Snowd393c1b2017-09-14 12:18:12 -0600670_PyImport_FixupBuiltin(PyObject *mod, const char *name, PyObject *modules)
Victor Stinner49d3f252010-10-17 01:24:53 +0000671{
672 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100673 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100674 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100675 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000676 return -1;
Eric Snowd393c1b2017-09-14 12:18:12 -0600677 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj, modules);
Victor Stinner95872862011-03-07 18:20:56 +0100678 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000679 return res;
680}
681
Guido van Rossum25ce5661997-08-02 03:10:38 +0000682PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100683_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000684{
Eric Snowd393c1b2017-09-14 12:18:12 -0600685 PyObject *modules = PyImport_GetModuleDict();
686 return _PyImport_FindExtensionObjectEx(name, filename, modules);
687}
688
689PyObject *
690_PyImport_FindExtensionObjectEx(PyObject *name, PyObject *filename,
691 PyObject *modules)
692{
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500693 PyObject *mod, *mdict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 PyModuleDef* def;
695 if (extensions == NULL)
696 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500697 key = PyTuple_Pack(2, filename, name);
698 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200699 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500700 def = (PyModuleDef *)PyDict_GetItem(extensions, key);
701 Py_DECREF(key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 if (def == NULL)
703 return NULL;
704 if (def->m_size == -1) {
705 /* Module does not support repeated initialization */
706 if (def->m_base.m_copy == NULL)
707 return NULL;
Eric Snowd393c1b2017-09-14 12:18:12 -0600708 mod = _PyImport_AddModuleObject(name, modules);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 if (mod == NULL)
710 return NULL;
711 mdict = PyModule_GetDict(mod);
712 if (mdict == NULL)
713 return NULL;
714 if (PyDict_Update(mdict, def->m_base.m_copy))
715 return NULL;
716 }
717 else {
718 if (def->m_base.m_init == NULL)
719 return NULL;
720 mod = def->m_base.m_init();
721 if (mod == NULL)
722 return NULL;
Eric Snow3f9eee62017-09-15 16:35:20 -0600723 if (PyObject_SetItem(modules, name, mod) == -1) {
Christian Heimes09ca7942013-07-20 14:51:53 +0200724 Py_DECREF(mod);
725 return NULL;
726 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 Py_DECREF(mod);
728 }
729 if (_PyState_AddModule(mod, def) < 0) {
Eric Snow3f9eee62017-09-15 16:35:20 -0600730 PyMapping_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000731 Py_DECREF(mod);
732 return NULL;
733 }
734 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100735 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 name, filename);
737 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000738
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739}
740
Victor Stinner49d3f252010-10-17 01:24:53 +0000741PyObject *
Eric Snowd393c1b2017-09-14 12:18:12 -0600742_PyImport_FindBuiltin(const char *name, PyObject *modules)
Victor Stinner49d3f252010-10-17 01:24:53 +0000743{
Victor Stinner95872862011-03-07 18:20:56 +0100744 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100745 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100746 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000747 return NULL;
Eric Snowd393c1b2017-09-14 12:18:12 -0600748 res = _PyImport_FindExtensionObjectEx(nameobj, nameobj, modules);
Victor Stinner95872862011-03-07 18:20:56 +0100749 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000750 return res;
751}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000752
753/* Get the module object corresponding to a module name.
754 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000755 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000756 Because the former action is most common, THIS DOES NOT RETURN A
757 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000758
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000760PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000761{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 PyObject *modules = PyImport_GetModuleDict();
Eric Snowd393c1b2017-09-14 12:18:12 -0600763 return _PyImport_AddModuleObject(name, modules);
764}
765
766PyObject *
767_PyImport_AddModuleObject(PyObject *name, PyObject *modules)
768{
Eric Snow86b7afd2017-09-04 17:54:09 -0600769 PyObject *m;
Eric Snow3f9eee62017-09-15 16:35:20 -0600770 if (PyDict_CheckExact(modules)) {
771 m = PyDict_GetItemWithError(modules, name);
772 }
773 else {
774 m = PyObject_GetItem(modules, name);
775 // For backward-comaptibility we copy the behavior
776 // of PyDict_GetItemWithError().
777 if (PyErr_ExceptionMatches(PyExc_KeyError)) {
778 PyErr_Clear();
779 }
Serhiy Storchaka48a583b2016-02-10 10:31:20 +0200780 }
781 if (PyErr_Occurred()) {
782 return NULL;
783 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600784 if (m != NULL && PyModule_Check(m)) {
785 return m;
786 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000787 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (m == NULL)
789 return NULL;
Eric Snow3f9eee62017-09-15 16:35:20 -0600790 if (PyObject_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 Py_DECREF(m);
792 return NULL;
793 }
794 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000797}
798
Victor Stinner27ee0892011-03-04 12:57:09 +0000799PyObject *
800PyImport_AddModule(const char *name)
801{
802 PyObject *nameobj, *module;
803 nameobj = PyUnicode_FromString(name);
804 if (nameobj == NULL)
805 return NULL;
806 module = PyImport_AddModuleObject(nameobj);
807 Py_DECREF(nameobj);
808 return module;
809}
810
811
Tim Peters1cd70172004-08-02 03:52:12 +0000812/* Remove name from sys.modules, if it's there. */
813static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000814remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 PyObject *modules = PyImport_GetModuleDict();
Eric Snow3f9eee62017-09-15 16:35:20 -0600817 if (PyMapping_DelItem(modules, name) < 0) {
818 if (!PyMapping_HasKey(modules, name)) {
819 return;
820 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 Py_FatalError("import: deleting existing key in"
822 "sys.modules failed");
Eric Snow3f9eee62017-09-15 16:35:20 -0600823 }
Tim Peters1cd70172004-08-02 03:52:12 +0000824}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000825
Christian Heimes3b06e532008-01-07 20:12:44 +0000826
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000827/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000828 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
829 * removed from sys.modules, to avoid leaving damaged module objects
830 * in sys.modules. The caller may wish to restore the original
831 * module object (if any) in this case; PyImport_ReloadModule is an
832 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000833 *
834 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
835 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000836 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000837PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +0300838PyImport_ExecCodeModule(const char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000840 return PyImport_ExecCodeModuleWithPathnames(
841 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000842}
843
844PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +0300845PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000846{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 return PyImport_ExecCodeModuleWithPathnames(
848 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000849}
850
851PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +0300852PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co,
853 const char *pathname,
854 const char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000855{
Victor Stinner27ee0892011-03-04 12:57:09 +0000856 PyObject *m = NULL;
Eric Snow32439d62015-05-02 19:15:18 -0600857 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL, *external= NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000858
859 nameobj = PyUnicode_FromString(name);
860 if (nameobj == NULL)
861 return NULL;
862
Victor Stinner27ee0892011-03-04 12:57:09 +0000863 if (cpathname != NULL) {
864 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
865 if (cpathobj == NULL)
866 goto error;
Brett Cannona6473f92012-07-13 13:57:03 -0400867 }
868 else
Victor Stinner27ee0892011-03-04 12:57:09 +0000869 cpathobj = NULL;
Brett Cannona6473f92012-07-13 13:57:03 -0400870
871 if (pathname != NULL) {
872 pathobj = PyUnicode_DecodeFSDefault(pathname);
873 if (pathobj == NULL)
874 goto error;
875 }
876 else if (cpathobj != NULL) {
877 PyInterpreterState *interp = PyThreadState_GET()->interp;
878 _Py_IDENTIFIER(_get_sourcefile);
879
880 if (interp == NULL) {
881 Py_FatalError("PyImport_ExecCodeModuleWithPathnames: "
882 "no interpreter!");
883 }
884
Eric Snow32439d62015-05-02 19:15:18 -0600885 external= PyObject_GetAttrString(interp->importlib,
886 "_bootstrap_external");
887 if (external != NULL) {
888 pathobj = _PyObject_CallMethodIdObjArgs(external,
889 &PyId__get_sourcefile, cpathobj,
890 NULL);
891 Py_DECREF(external);
892 }
Brett Cannona6473f92012-07-13 13:57:03 -0400893 if (pathobj == NULL)
894 PyErr_Clear();
895 }
896 else
897 pathobj = NULL;
898
Victor Stinner27ee0892011-03-04 12:57:09 +0000899 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
900error:
901 Py_DECREF(nameobj);
902 Py_XDECREF(pathobj);
903 Py_XDECREF(cpathobj);
904 return m;
905}
906
Brett Cannon18fc4e72014-04-04 10:01:46 -0400907static PyObject *
908module_dict_for_exec(PyObject *name)
Victor Stinner27ee0892011-03-04 12:57:09 +0000909{
Brett Cannon18fc4e72014-04-04 10:01:46 -0400910 PyObject *m, *d = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000911
Victor Stinner27ee0892011-03-04 12:57:09 +0000912 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 if (m == NULL)
914 return NULL;
915 /* If the module is being reloaded, we get the old module back
916 and re-use its dict to exec the new code. */
917 d = PyModule_GetDict(m);
918 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
919 if (PyDict_SetItemString(d, "__builtins__",
Brett Cannon18fc4e72014-04-04 10:01:46 -0400920 PyEval_GetBuiltins()) != 0) {
921 remove_module(name);
922 return NULL;
923 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 }
Brett Cannon18fc4e72014-04-04 10:01:46 -0400925
Eric Snow08197a42014-05-12 17:54:55 -0600926 return d; /* Return a borrowed reference. */
Brett Cannon18fc4e72014-04-04 10:01:46 -0400927}
928
929static PyObject *
930exec_code_in_module(PyObject *name, PyObject *module_dict, PyObject *code_object)
931{
Brett Cannon18fc4e72014-04-04 10:01:46 -0400932 PyObject *v, *m;
933
934 v = PyEval_EvalCode(code_object, module_dict, module_dict);
935 if (v == NULL) {
936 remove_module(name);
937 return NULL;
938 }
939 Py_DECREF(v);
940
Eric Snow3f9eee62017-09-15 16:35:20 -0600941 m = PyImport_GetModule(name);
942 if (m == NULL) {
Brett Cannon18fc4e72014-04-04 10:01:46 -0400943 PyErr_Format(PyExc_ImportError,
944 "Loaded module %R not found in sys.modules",
945 name);
946 return NULL;
947 }
948
Brett Cannon18fc4e72014-04-04 10:01:46 -0400949 return m;
950}
951
952PyObject*
953PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
954 PyObject *cpathname)
955{
Eric Snow32439d62015-05-02 19:15:18 -0600956 PyObject *d, *external, *res;
Eric Snow08197a42014-05-12 17:54:55 -0600957 PyInterpreterState *interp = PyThreadState_GET()->interp;
958 _Py_IDENTIFIER(_fix_up_module);
Brett Cannon18fc4e72014-04-04 10:01:46 -0400959
960 d = module_dict_for_exec(name);
961 if (d == NULL) {
962 return NULL;
963 }
964
Eric Snow08197a42014-05-12 17:54:55 -0600965 if (pathname == NULL) {
966 pathname = ((PyCodeObject *)co)->co_filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 }
Eric Snow32439d62015-05-02 19:15:18 -0600968 external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
969 if (external == NULL)
970 return NULL;
971 res = _PyObject_CallMethodIdObjArgs(external,
Eric Snow08197a42014-05-12 17:54:55 -0600972 &PyId__fix_up_module,
973 d, name, pathname, cpathname, NULL);
Eric Snow32439d62015-05-02 19:15:18 -0600974 Py_DECREF(external);
Eric Snow08197a42014-05-12 17:54:55 -0600975 if (res != NULL) {
Eric Snow58cfdd82014-05-29 12:31:39 -0600976 Py_DECREF(res);
Eric Snow08197a42014-05-12 17:54:55 -0600977 res = exec_code_in_module(name, d, co);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 }
Eric Snow08197a42014-05-12 17:54:55 -0600979 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000980}
981
982
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000983static void
984update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
985{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 PyObject *constants, *tmp;
987 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 if (PyUnicode_Compare(co->co_filename, oldname))
990 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000991
Serhiy Storchaka576f1322016-01-05 21:27:54 +0200992 Py_INCREF(newname);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300993 Py_XSETREF(co->co_filename, newname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000994
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 constants = co->co_consts;
996 n = PyTuple_GET_SIZE(constants);
997 for (i = 0; i < n; i++) {
998 tmp = PyTuple_GET_ITEM(constants, i);
999 if (PyCode_Check(tmp))
1000 update_code_filenames((PyCodeObject *)tmp,
1001 oldname, newname);
1002 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001003}
1004
Victor Stinner2f42ae52011-03-20 00:41:24 +01001005static void
1006update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001007{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001008 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001009
Victor Stinner2f42ae52011-03-20 00:41:24 +01001010 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1011 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 oldname = co->co_filename;
1014 Py_INCREF(oldname);
1015 update_code_filenames(co, oldname, newname);
1016 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001017}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001018
Brett Cannon4caa61d2014-01-09 19:03:32 -05001019/*[clinic input]
1020_imp._fix_co_filename
1021
1022 code: object(type="PyCodeObject *", subclass_of="&PyCode_Type")
1023 Code object to change.
1024
1025 path: unicode
1026 File path to use.
1027 /
1028
1029Changes code.co_filename to specify the passed-in file path.
1030[clinic start generated code]*/
1031
Brett Cannon4caa61d2014-01-09 19:03:32 -05001032static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001033_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code,
Larry Hastings89964c42015-04-14 18:07:59 -04001034 PyObject *path)
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001035/*[clinic end generated code: output=1d002f100235587d input=895ba50e78b82f05]*/
Brett Cannon442c9b92011-03-23 16:14:42 -07001036
Brett Cannon4caa61d2014-01-09 19:03:32 -05001037{
Brett Cannona6dec2e2014-01-10 07:43:55 -05001038 update_compiled_module(code, path);
Brett Cannon442c9b92011-03-23 16:14:42 -07001039
1040 Py_RETURN_NONE;
1041}
1042
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001043
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001044/* Forward */
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001045static const struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001046
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001047
1048/* Helper to test for built-in module */
1049
1050static int
Victor Stinner95872862011-03-07 18:20:56 +01001051is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001052{
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001053 int i;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001054 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001055 if (_PyUnicode_EqualToASCIIString(name, PyImport_Inittab[i].name)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 if (PyImport_Inittab[i].initfunc == NULL)
1057 return -1;
1058 else
1059 return 1;
1060 }
1061 }
1062 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001063}
1064
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001065
Brett Cannonfdcdd9e2016-07-08 11:00:00 -07001066/* Return a finder object for a sys.path/pkg.__path__ item 'p',
Just van Rossum52e14d62002-12-30 22:08:05 +00001067 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001068 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001069 that can handle the path item. Return None if no hook could;
Brett Cannonfdcdd9e2016-07-08 11:00:00 -07001070 this tells our caller that the path based finder could not find
1071 a finder for this path item. Cache the result in
1072 path_importer_cache.
Just van Rossum52e14d62002-12-30 22:08:05 +00001073 Returns a borrowed reference. */
1074
1075static PyObject *
1076get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001078{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 PyObject *importer;
1080 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 /* These conditions are the caller's responsibility: */
1083 assert(PyList_Check(path_hooks));
1084 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001085
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 nhooks = PyList_Size(path_hooks);
1087 if (nhooks < 0)
1088 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 importer = PyDict_GetItem(path_importer_cache, p);
1091 if (importer != NULL)
1092 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 /* set path_importer_cache[p] to None to avoid recursion */
1095 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1096 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001097
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001098 for (j = 0; j < nhooks; j++) {
1099 PyObject *hook = PyList_GetItem(path_hooks, j);
1100 if (hook == NULL)
1101 return NULL;
Victor Stinnerde4ae3d2016-12-04 22:59:09 +01001102 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 if (importer != NULL)
1104 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001105
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1107 return NULL;
1108 }
1109 PyErr_Clear();
1110 }
1111 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -04001112 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 }
1114 if (importer != NULL) {
1115 int err = PyDict_SetItem(path_importer_cache, p, importer);
1116 Py_DECREF(importer);
1117 if (err != 0)
1118 return NULL;
1119 }
1120 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001121}
1122
Christian Heimes9cd17752007-11-18 19:35:23 +00001123PyAPI_FUNC(PyObject *)
1124PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001126
Victor Stinner1e53bba2013-07-16 22:26:05 +02001127 path_importer_cache = PySys_GetObject("path_importer_cache");
1128 path_hooks = PySys_GetObject("path_hooks");
1129 if (path_importer_cache != NULL && path_hooks != NULL) {
1130 importer = get_path_importer(path_importer_cache,
1131 path_hooks, path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 }
1133 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1134 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001135}
1136
Nick Coghland5cacbb2015-05-23 22:24:10 +10001137/*[clinic input]
1138_imp.create_builtin
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001139
Nick Coghland5cacbb2015-05-23 22:24:10 +10001140 spec: object
1141 /
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001142
Nick Coghland5cacbb2015-05-23 22:24:10 +10001143Create an extension module.
1144[clinic start generated code]*/
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001145
Nick Coghland5cacbb2015-05-23 22:24:10 +10001146static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001147_imp_create_builtin(PyObject *module, PyObject *spec)
1148/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001149{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 struct _inittab *p;
Nick Coghland5cacbb2015-05-23 22:24:10 +10001151 PyObject *name;
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001152 const char *namestr;
Victor Stinner5eb4f592013-11-14 22:38:52 +01001153 PyObject *mod;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001154
Nick Coghland5cacbb2015-05-23 22:24:10 +10001155 name = PyObject_GetAttrString(spec, "name");
1156 if (name == NULL) {
1157 return NULL;
1158 }
1159
Victor Stinner5eb4f592013-11-14 22:38:52 +01001160 mod = _PyImport_FindExtensionObject(name, name);
Nick Coghland5cacbb2015-05-23 22:24:10 +10001161 if (mod || PyErr_Occurred()) {
1162 Py_DECREF(name);
Raymond Hettingerf0afe772016-08-31 08:44:11 -07001163 Py_XINCREF(mod);
Nick Coghland5cacbb2015-05-23 22:24:10 +10001164 return mod;
1165 }
1166
1167 namestr = PyUnicode_AsUTF8(name);
1168 if (namestr == NULL) {
1169 Py_DECREF(name);
1170 return NULL;
1171 }
Guido van Rossum25ce5661997-08-02 03:10:38 +00001172
Eric Snowd393c1b2017-09-14 12:18:12 -06001173 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 for (p = PyImport_Inittab; p->name != NULL; p++) {
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001175 PyModuleDef *def;
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001176 if (_PyUnicode_EqualToASCIIString(name, p->name)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 if (p->initfunc == NULL) {
Nick Coghland5cacbb2015-05-23 22:24:10 +10001178 /* Cannot re-init internal module ("sys" or "builtins") */
1179 mod = PyImport_AddModule(namestr);
1180 Py_DECREF(name);
1181 return mod;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 mod = (*p->initfunc)();
Nick Coghland5cacbb2015-05-23 22:24:10 +10001184 if (mod == NULL) {
1185 Py_DECREF(name);
1186 return NULL;
1187 }
1188 if (PyObject_TypeCheck(mod, &PyModuleDef_Type)) {
1189 Py_DECREF(name);
1190 return PyModule_FromDefAndSpec((PyModuleDef*)mod, spec);
1191 } else {
1192 /* Remember pointer to module init function. */
1193 def = PyModule_GetDef(mod);
Christian Heimesa78b6272016-09-09 00:25:03 +02001194 if (def == NULL) {
1195 Py_DECREF(name);
1196 return NULL;
1197 }
Nick Coghland5cacbb2015-05-23 22:24:10 +10001198 def->m_base.m_init = p->initfunc;
Eric Snowd393c1b2017-09-14 12:18:12 -06001199 if (modules == NULL) {
1200 modules = PyImport_GetModuleDict();
1201 }
1202 if (_PyImport_FixupExtensionObject(mod, name, name,
1203 modules) < 0) {
Nick Coghland5cacbb2015-05-23 22:24:10 +10001204 Py_DECREF(name);
1205 return NULL;
1206 }
1207 Py_DECREF(name);
1208 return mod;
1209 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 }
1211 }
Nick Coghland5cacbb2015-05-23 22:24:10 +10001212 Py_DECREF(name);
1213 Py_RETURN_NONE;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001214}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001215
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001217/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001218
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001219static const struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01001220find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001221{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001222 const struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001223
Victor Stinner53dc7352011-03-20 01:50:21 +01001224 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00001226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 for (p = PyImport_FrozenModules; ; p++) {
1228 if (p->name == NULL)
1229 return NULL;
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001230 if (_PyUnicode_EqualToASCIIString(name, p->name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 break;
1232 }
1233 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001234}
1235
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001237get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001238{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001239 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001240 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 if (p == NULL) {
1243 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001244 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 name);
1246 return NULL;
1247 }
1248 if (p->code == NULL) {
1249 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001250 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 name);
1252 return NULL;
1253 }
1254 size = p->size;
1255 if (size < 0)
1256 size = -size;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001257 return PyMarshal_ReadObjectFromString((const char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001258}
1259
Brett Cannon8d110132009-03-15 02:20:16 +00001260static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001261is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001262{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001263 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 if (p == NULL) {
1267 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001268 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 name);
1270 return NULL;
1271 }
Brett Cannon8d110132009-03-15 02:20:16 +00001272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 if (size < 0)
1276 Py_RETURN_TRUE;
1277 else
1278 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001279}
1280
1281
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001282/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001283 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001284 an exception set if the initialization failed.
1285 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001286
1287int
Victor Stinner53dc7352011-03-20 01:50:21 +01001288PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001289{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001290 const struct _frozen *p;
Brett Cannon18fc4e72014-04-04 10:01:46 -04001291 PyObject *co, *m, *d;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 int ispackage;
1293 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001294
Victor Stinner53dc7352011-03-20 01:50:21 +01001295 p = find_frozen(name);
1296
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 if (p == NULL)
1298 return 0;
1299 if (p->code == NULL) {
1300 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001301 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001302 name);
1303 return -1;
1304 }
1305 size = p->size;
1306 ispackage = (size < 0);
1307 if (ispackage)
1308 size = -size;
Serhiy Storchakac6792272013-10-19 21:03:34 +03001309 co = PyMarshal_ReadObjectFromString((const char *)p->code, size);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 if (co == NULL)
1311 return -1;
1312 if (!PyCode_Check(co)) {
1313 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001314 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 name);
1316 goto err_return;
1317 }
1318 if (ispackage) {
Brett Cannon3e0651b2013-05-31 23:18:39 -04001319 /* Set __path__ to the empty list */
Brett Cannon18fc4e72014-04-04 10:01:46 -04001320 PyObject *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001321 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001322 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 if (m == NULL)
1324 goto err_return;
1325 d = PyModule_GetDict(m);
Brett Cannon3e0651b2013-05-31 23:18:39 -04001326 l = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001327 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 goto err_return;
1329 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 err = PyDict_SetItemString(d, "__path__", l);
1331 Py_DECREF(l);
1332 if (err != 0)
1333 goto err_return;
1334 }
Brett Cannon18fc4e72014-04-04 10:01:46 -04001335 d = module_dict_for_exec(name);
1336 if (d == NULL) {
Victor Stinner53dc7352011-03-20 01:50:21 +01001337 goto err_return;
Brett Cannon18fc4e72014-04-04 10:01:46 -04001338 }
1339 m = exec_code_in_module(name, d, co);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 if (m == NULL)
1341 goto err_return;
1342 Py_DECREF(co);
1343 Py_DECREF(m);
1344 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001345err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001346 Py_DECREF(co);
1347 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001348}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001349
Victor Stinner53dc7352011-03-20 01:50:21 +01001350int
Serhiy Storchakac6792272013-10-19 21:03:34 +03001351PyImport_ImportFrozenModule(const char *name)
Victor Stinner53dc7352011-03-20 01:50:21 +01001352{
1353 PyObject *nameobj;
1354 int ret;
1355 nameobj = PyUnicode_InternFromString(name);
1356 if (nameobj == NULL)
1357 return -1;
1358 ret = PyImport_ImportFrozenModuleObject(nameobj);
1359 Py_DECREF(nameobj);
1360 return ret;
1361}
1362
Guido van Rossum74e6a111994-08-29 12:54:38 +00001363
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001364/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001365 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001366
Guido van Rossum79f25d91997-04-29 20:08:16 +00001367PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001368PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001369{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001370 PyObject *pname;
1371 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001372
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001373 pname = PyUnicode_FromString(name);
1374 if (pname == NULL)
1375 return NULL;
1376 result = PyImport_Import(pname);
1377 Py_DECREF(pname);
1378 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001379}
1380
Christian Heimes072c0f12008-01-03 23:01:04 +00001381/* Import a module without blocking
1382 *
1383 * At first it tries to fetch the module from sys.modules. If the module was
1384 * never loaded before it loads it with PyImport_ImportModule() unless another
1385 * thread holds the import lock. In the latter case the function raises an
1386 * ImportError instead of blocking.
1387 *
1388 * Returns the module object with incremented ref count.
1389 */
1390PyObject *
1391PyImport_ImportModuleNoBlock(const char *name)
1392{
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001393 return PyImport_ImportModule(name);
Christian Heimes072c0f12008-01-03 23:01:04 +00001394}
1395
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001396
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001397/* Remove importlib frames from the traceback,
1398 * except in Verbose mode. */
1399static void
1400remove_importlib_frames(void)
1401{
1402 const char *importlib_filename = "<frozen importlib._bootstrap>";
Eric Snow32439d62015-05-02 19:15:18 -06001403 const char *external_filename = "<frozen importlib._bootstrap_external>";
Nick Coghlan42c07662012-07-31 21:14:18 +10001404 const char *remove_frames = "_call_with_frames_removed";
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001405 int always_trim = 0;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001406 int in_importlib = 0;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001407 PyObject *exception, *value, *base_tb, *tb;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001408 PyObject **prev_link, **outer_link = NULL;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001409
1410 /* Synopsis: if it's an ImportError, we trim all importlib chunks
Nick Coghlan42c07662012-07-31 21:14:18 +10001411 from the traceback. We always trim chunks
1412 which end with a call to "_call_with_frames_removed". */
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001413
1414 PyErr_Fetch(&exception, &value, &base_tb);
1415 if (!exception || Py_VerboseFlag)
1416 goto done;
1417 if (PyType_IsSubtype((PyTypeObject *) exception,
1418 (PyTypeObject *) PyExc_ImportError))
1419 always_trim = 1;
1420
1421 prev_link = &base_tb;
1422 tb = base_tb;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001423 while (tb != NULL) {
1424 PyTracebackObject *traceback = (PyTracebackObject *)tb;
1425 PyObject *next = (PyObject *) traceback->tb_next;
1426 PyFrameObject *frame = traceback->tb_frame;
1427 PyCodeObject *code = frame->f_code;
1428 int now_in_importlib;
1429
1430 assert(PyTraceBack_Check(tb));
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001431 now_in_importlib = _PyUnicode_EqualToASCIIString(code->co_filename, importlib_filename) ||
1432 _PyUnicode_EqualToASCIIString(code->co_filename, external_filename);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001433 if (now_in_importlib && !in_importlib) {
1434 /* This is the link to this chunk of importlib tracebacks */
1435 outer_link = prev_link;
1436 }
1437 in_importlib = now_in_importlib;
1438
1439 if (in_importlib &&
1440 (always_trim ||
Serhiy Storchakaf4934ea2016-11-16 10:17:58 +02001441 _PyUnicode_EqualToASCIIString(code->co_name, remove_frames))) {
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001442 Py_XINCREF(next);
Serhiy Storchakaec397562016-04-06 09:50:03 +03001443 Py_XSETREF(*outer_link, next);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001444 prev_link = outer_link;
1445 }
1446 else {
1447 prev_link = (PyObject **) &traceback->tb_next;
1448 }
1449 tb = next;
1450 }
1451done:
1452 PyErr_Restore(exception, value, base_tb);
1453}
1454
1455
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001456static PyObject *
1457resolve_name(PyObject *name, PyObject *globals, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001458{
Eric Snowb523f842013-11-22 09:05:39 -07001459 _Py_IDENTIFIER(__spec__);
Brett Cannonfd074152012-04-14 14:10:13 -04001460 _Py_IDENTIFIER(__package__);
1461 _Py_IDENTIFIER(__path__);
1462 _Py_IDENTIFIER(__name__);
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001463 _Py_IDENTIFIER(parent);
1464 PyObject *abs_name;
1465 PyObject *package = NULL;
1466 PyObject *spec;
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001467 Py_ssize_t last_dot;
1468 PyObject *base;
1469 int level_up;
1470
1471 if (globals == NULL) {
1472 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
1473 goto error;
1474 }
1475 if (!PyDict_Check(globals)) {
1476 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1477 goto error;
1478 }
1479 package = _PyDict_GetItemId(globals, &PyId___package__);
1480 if (package == Py_None) {
1481 package = NULL;
1482 }
1483 spec = _PyDict_GetItemId(globals, &PyId___spec__);
1484
1485 if (package != NULL) {
1486 Py_INCREF(package);
1487 if (!PyUnicode_Check(package)) {
1488 PyErr_SetString(PyExc_TypeError, "package must be a string");
1489 goto error;
1490 }
1491 else if (spec != NULL && spec != Py_None) {
1492 int equal;
1493 PyObject *parent = _PyObject_GetAttrId(spec, &PyId_parent);
1494 if (parent == NULL) {
1495 goto error;
1496 }
1497
1498 equal = PyObject_RichCompareBool(package, parent, Py_EQ);
1499 Py_DECREF(parent);
1500 if (equal < 0) {
1501 goto error;
1502 }
1503 else if (equal == 0) {
1504 if (PyErr_WarnEx(PyExc_ImportWarning,
1505 "__package__ != __spec__.parent", 1) < 0) {
1506 goto error;
1507 }
1508 }
1509 }
1510 }
1511 else if (spec != NULL && spec != Py_None) {
1512 package = _PyObject_GetAttrId(spec, &PyId_parent);
1513 if (package == NULL) {
1514 goto error;
1515 }
1516 else if (!PyUnicode_Check(package)) {
1517 PyErr_SetString(PyExc_TypeError,
1518 "__spec__.parent must be a string");
1519 goto error;
1520 }
1521 }
1522 else {
1523 if (PyErr_WarnEx(PyExc_ImportWarning,
1524 "can't resolve package from __spec__ or __package__, "
1525 "falling back on __name__ and __path__", 1) < 0) {
1526 goto error;
1527 }
1528
1529 package = _PyDict_GetItemId(globals, &PyId___name__);
1530 if (package == NULL) {
1531 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
1532 goto error;
1533 }
1534
1535 Py_INCREF(package);
1536 if (!PyUnicode_Check(package)) {
1537 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1538 goto error;
1539 }
1540
1541 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
1542 Py_ssize_t dot;
1543
1544 if (PyUnicode_READY(package) < 0) {
1545 goto error;
1546 }
1547
1548 dot = PyUnicode_FindChar(package, '.',
1549 0, PyUnicode_GET_LENGTH(package), -1);
1550 if (dot == -2) {
1551 goto error;
1552 }
1553
1554 if (dot >= 0) {
1555 PyObject *substr = PyUnicode_Substring(package, 0, dot);
1556 if (substr == NULL) {
1557 goto error;
1558 }
1559 Py_SETREF(package, substr);
1560 }
1561 }
1562 }
1563
1564 last_dot = PyUnicode_GET_LENGTH(package);
1565 if (last_dot == 0) {
1566 PyErr_SetString(PyExc_ImportError,
1567 "attempted relative import with no known parent package");
1568 goto error;
1569 }
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001570
1571 for (level_up = 1; level_up < level; level_up += 1) {
1572 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1573 if (last_dot == -2) {
1574 goto error;
1575 }
1576 else if (last_dot == -1) {
1577 PyErr_SetString(PyExc_ValueError,
1578 "attempted relative import beyond top-level "
1579 "package");
1580 goto error;
1581 }
1582 }
1583
1584 base = PyUnicode_Substring(package, 0, last_dot);
1585 Py_DECREF(package);
1586 if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) {
1587 return base;
1588 }
1589
1590 abs_name = PyUnicode_FromFormat("%U.%U", base, name);
1591 Py_DECREF(base);
1592 return abs_name;
1593
1594 error:
1595 Py_XDECREF(package);
1596 return NULL;
1597}
1598
Neil Schemenauereea3cc12017-12-03 09:26:03 -08001599static PyObject *
1600import_find_and_load(PyObject *abs_name)
1601{
1602 _Py_IDENTIFIER(_find_and_load);
1603 PyObject *mod = NULL;
1604 PyInterpreterState *interp = PyThreadState_GET()->interp;
1605 int import_time = interp->core_config.import_time;
1606 static int import_level;
1607 static _PyTime_t accumulated;
1608
1609 _PyTime_t t1 = 0, accumulated_copy = accumulated;
1610
1611 /* XOptions is initialized after first some imports.
1612 * So we can't have negative cache before completed initialization.
1613 * Anyway, importlib._find_and_load is much slower than
1614 * _PyDict_GetItemIdWithError().
1615 */
1616 if (import_time) {
1617 static int header = 1;
1618 if (header) {
1619 fputs("import time: self [us] | cumulative | imported package\n",
1620 stderr);
1621 header = 0;
1622 }
1623
1624 import_level++;
1625 t1 = _PyTime_GetPerfCounter();
1626 accumulated = 0;
1627 }
1628
1629 if (PyDTrace_IMPORT_FIND_LOAD_START_ENABLED())
1630 PyDTrace_IMPORT_FIND_LOAD_START(PyUnicode_AsUTF8(abs_name));
1631
1632 mod = _PyObject_CallMethodIdObjArgs(interp->importlib,
1633 &PyId__find_and_load, abs_name,
1634 interp->import_func, NULL);
1635
1636 if (PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED())
1637 PyDTrace_IMPORT_FIND_LOAD_DONE(PyUnicode_AsUTF8(abs_name),
1638 mod != NULL);
1639
1640 if (import_time) {
1641 _PyTime_t cum = _PyTime_GetPerfCounter() - t1;
1642
1643 import_level--;
1644 fprintf(stderr, "import time: %9ld | %10ld | %*s%s\n",
1645 (long)_PyTime_AsMicroseconds(cum - accumulated, _PyTime_ROUND_CEILING),
1646 (long)_PyTime_AsMicroseconds(cum, _PyTime_ROUND_CEILING),
1647 import_level*2, "", PyUnicode_AsUTF8(abs_name));
1648
1649 accumulated = accumulated_copy + cum;
1650 }
1651
1652 return mod;
1653}
1654
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001655PyObject *
1656PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
1657 PyObject *locals, PyObject *fromlist,
1658 int level)
1659{
Brett Cannonfd074152012-04-14 14:10:13 -04001660 _Py_IDENTIFIER(_handle_fromlist);
Brett Cannonfd074152012-04-14 14:10:13 -04001661 PyObject *abs_name = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001662 PyObject *final_mod = NULL;
1663 PyObject *mod = NULL;
1664 PyObject *package = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001665 PyInterpreterState *interp = PyThreadState_GET()->interp;
Serhiy Storchakafa494fd2015-05-30 17:45:22 +03001666 int has_from;
Brett Cannonfd074152012-04-14 14:10:13 -04001667
Brett Cannonfd074152012-04-14 14:10:13 -04001668 if (name == NULL) {
1669 PyErr_SetString(PyExc_ValueError, "Empty module name");
1670 goto error;
1671 }
1672
1673 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1674 for added performance. */
1675
1676 if (!PyUnicode_Check(name)) {
1677 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1678 goto error;
1679 }
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001680 if (PyUnicode_READY(name) < 0) {
Brett Cannonfd074152012-04-14 14:10:13 -04001681 goto error;
1682 }
1683 if (level < 0) {
1684 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1685 goto error;
1686 }
Brett Cannon849113a2016-01-22 15:25:50 -08001687
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001688 if (level > 0) {
1689 abs_name = resolve_name(name, globals, level);
1690 if (abs_name == NULL)
Brett Cannon9fa81262016-01-22 16:39:02 -08001691 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001692 }
1693 else { /* level == 0 */
1694 if (PyUnicode_GET_LENGTH(name) == 0) {
1695 PyErr_SetString(PyExc_ValueError, "Empty module name");
1696 goto error;
1697 }
Brett Cannonfd074152012-04-14 14:10:13 -04001698 abs_name = name;
1699 Py_INCREF(abs_name);
1700 }
1701
Eric Snow3f9eee62017-09-15 16:35:20 -06001702 mod = PyImport_GetModule(abs_name);
Serhiy Storchakab4baace2017-07-06 08:09:03 +03001703 if (mod != NULL && mod != Py_None) {
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001704 _Py_IDENTIFIER(__spec__);
1705 _Py_IDENTIFIER(_initializing);
1706 _Py_IDENTIFIER(_lock_unlock_module);
Eric Snowb523f842013-11-22 09:05:39 -07001707 PyObject *value = NULL;
1708 PyObject *spec;
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001709 int initializing = 0;
1710
Antoine Pitrou03989852012-08-28 00:24:52 +02001711 /* Optimization: only call _bootstrap._lock_unlock_module() if
Eric Snowb523f842013-11-22 09:05:39 -07001712 __spec__._initializing is true.
1713 NOTE: because of this, initializing must be set *before*
Antoine Pitrou03989852012-08-28 00:24:52 +02001714 stuffing the new module in sys.modules.
1715 */
Eric Snowb523f842013-11-22 09:05:39 -07001716 spec = _PyObject_GetAttrId(mod, &PyId___spec__);
1717 if (spec != NULL) {
1718 value = _PyObject_GetAttrId(spec, &PyId__initializing);
1719 Py_DECREF(spec);
1720 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001721 if (value == NULL)
1722 PyErr_Clear();
1723 else {
1724 initializing = PyObject_IsTrue(value);
1725 Py_DECREF(value);
1726 if (initializing == -1)
1727 PyErr_Clear();
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001728 if (initializing > 0) {
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001729 value = _PyObject_CallMethodIdObjArgs(interp->importlib,
1730 &PyId__lock_unlock_module, abs_name,
1731 NULL);
1732 if (value == NULL)
1733 goto error;
1734 Py_DECREF(value);
1735 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001736 }
Brett Cannonfd074152012-04-14 14:10:13 -04001737 }
1738 else {
Neil Schemenauer11cc2892017-12-07 16:24:59 -08001739 Py_XDECREF(mod);
Neil Schemenauereea3cc12017-12-03 09:26:03 -08001740 mod = import_find_and_load(abs_name);
Brett Cannonfd074152012-04-14 14:10:13 -04001741 if (mod == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001742 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001743 }
1744 }
1745
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001746 has_from = 0;
1747 if (fromlist != NULL && fromlist != Py_None) {
1748 has_from = PyObject_IsTrue(fromlist);
1749 if (has_from < 0)
1750 goto error;
1751 }
Serhiy Storchakafa494fd2015-05-30 17:45:22 +03001752 if (!has_from) {
Victor Stinner744c34e2016-05-20 11:36:13 +02001753 Py_ssize_t len = PyUnicode_GET_LENGTH(name);
1754 if (level == 0 || len > 0) {
1755 Py_ssize_t dot;
Brett Cannonfd074152012-04-14 14:10:13 -04001756
Victor Stinner744c34e2016-05-20 11:36:13 +02001757 dot = PyUnicode_FindChar(name, '.', 0, len, 1);
1758 if (dot == -2) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001759 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001760 }
1761
Victor Stinner744c34e2016-05-20 11:36:13 +02001762 if (dot == -1) {
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001763 /* No dot in module name, simple exit */
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001764 final_mod = mod;
1765 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001766 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001767 }
1768
Brett Cannonfd074152012-04-14 14:10:13 -04001769 if (level == 0) {
Victor Stinner744c34e2016-05-20 11:36:13 +02001770 PyObject *front = PyUnicode_Substring(name, 0, dot);
1771 if (front == NULL) {
1772 goto error;
1773 }
1774
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001775 final_mod = PyImport_ImportModuleLevelObject(front, NULL, NULL, NULL, 0);
Antoine Pitroub78174c2012-05-06 17:15:23 +02001776 Py_DECREF(front);
Brett Cannonfd074152012-04-14 14:10:13 -04001777 }
1778 else {
Victor Stinner744c34e2016-05-20 11:36:13 +02001779 Py_ssize_t cut_off = len - dot;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001780 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001781 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001782 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001783 if (to_return == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001784 goto error;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001785 }
Brett Cannonfd074152012-04-14 14:10:13 -04001786
Eric Snow3f9eee62017-09-15 16:35:20 -06001787 final_mod = PyImport_GetModule(to_return);
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001788 Py_DECREF(to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001789 if (final_mod == NULL) {
1790 PyErr_Format(PyExc_KeyError,
1791 "%R not in sys.modules as expected",
1792 to_return);
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001793 goto error;
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001794 }
Brett Cannonfd074152012-04-14 14:10:13 -04001795 }
1796 }
1797 else {
1798 final_mod = mod;
1799 Py_INCREF(mod);
1800 }
1801 }
1802 else {
Alexandre Vassalotti865eaa12013-05-02 10:44:04 -07001803 final_mod = _PyObject_CallMethodIdObjArgs(interp->importlib,
Brett Cannonfd074152012-04-14 14:10:13 -04001804 &PyId__handle_fromlist, mod,
Serhiy Storchaka133138a2016-08-02 22:51:21 +03001805 fromlist, interp->import_func,
Brett Cannonfd074152012-04-14 14:10:13 -04001806 NULL);
1807 }
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001808
Brett Cannonfd074152012-04-14 14:10:13 -04001809 error:
1810 Py_XDECREF(abs_name);
Brett Cannonfd074152012-04-14 14:10:13 -04001811 Py_XDECREF(mod);
1812 Py_XDECREF(package);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001813 if (final_mod == NULL)
1814 remove_importlib_frames();
Brett Cannonfd074152012-04-14 14:10:13 -04001815 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001816}
1817
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001818PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001819PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001820 PyObject *fromlist, int level)
1821{
1822 PyObject *nameobj, *mod;
1823 nameobj = PyUnicode_FromString(name);
1824 if (nameobj == NULL)
1825 return NULL;
1826 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1827 fromlist, level);
1828 Py_DECREF(nameobj);
1829 return mod;
1830}
1831
1832
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001833/* Re-import a module of any kind and return its module object, WITH
1834 INCREMENTED REFERENCE COUNT */
1835
Guido van Rossum79f25d91997-04-29 20:08:16 +00001836PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001837PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001838{
Eric Snow3f9eee62017-09-15 16:35:20 -06001839 _Py_IDENTIFIER(imp);
Brett Cannon62228db2012-04-29 14:38:11 -04001840 _Py_IDENTIFIER(reload);
1841 PyObject *reloaded_module = NULL;
Eric Snow3f9eee62017-09-15 16:35:20 -06001842 PyObject *imp = _PyImport_GetModuleId(&PyId_imp);
Brett Cannon62228db2012-04-29 14:38:11 -04001843 if (imp == NULL) {
1844 imp = PyImport_ImportModule("imp");
1845 if (imp == NULL) {
1846 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001849
Victor Stinner55ba38a2016-12-09 16:09:30 +01001850 reloaded_module = _PyObject_CallMethodIdObjArgs(imp, &PyId_reload, m, NULL);
Brett Cannon62228db2012-04-29 14:38:11 -04001851 Py_DECREF(imp);
1852 return reloaded_module;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001853}
1854
1855
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001856/* Higher-level import emulator which emulates the "import" statement
1857 more accurately -- it invokes the __import__() function from the
1858 builtins of the current globals. This means that the import is
1859 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001860 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001861 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001862 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001863 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001864
1865PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001866PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001867{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 static PyObject *silly_list = NULL;
1869 static PyObject *builtins_str = NULL;
1870 static PyObject *import_str = NULL;
1871 PyObject *globals = NULL;
1872 PyObject *import = NULL;
1873 PyObject *builtins = NULL;
1874 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 /* Initialize constant string objects */
1877 if (silly_list == NULL) {
1878 import_str = PyUnicode_InternFromString("__import__");
1879 if (import_str == NULL)
1880 return NULL;
1881 builtins_str = PyUnicode_InternFromString("__builtins__");
1882 if (builtins_str == NULL)
1883 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001884 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 if (silly_list == NULL)
1886 return NULL;
1887 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 /* Get the builtins from current globals */
1890 globals = PyEval_GetGlobals();
1891 if (globals != NULL) {
1892 Py_INCREF(globals);
1893 builtins = PyObject_GetItem(globals, builtins_str);
1894 if (builtins == NULL)
1895 goto err;
1896 }
1897 else {
1898 /* No globals -- use standard builtins, and fake globals */
1899 builtins = PyImport_ImportModuleLevel("builtins",
1900 NULL, NULL, NULL, 0);
1901 if (builtins == NULL)
1902 return NULL;
1903 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1904 if (globals == NULL)
1905 goto err;
1906 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 /* Get the __import__ function from the builtins */
1909 if (PyDict_Check(builtins)) {
1910 import = PyObject_GetItem(builtins, import_str);
1911 if (import == NULL)
1912 PyErr_SetObject(PyExc_KeyError, import_str);
1913 }
1914 else
1915 import = PyObject_GetAttr(builtins, import_str);
1916 if (import == NULL)
1917 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001918
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001919 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001920 Always use absolute import here.
1921 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1923 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001924 if (r == NULL)
1925 goto err;
1926 Py_DECREF(r);
1927
Eric Snow3f9eee62017-09-15 16:35:20 -06001928 r = PyImport_GetModule(module_name);
1929 if (r == NULL && !PyErr_Occurred()) {
Serhiy Storchaka145541c2017-06-15 20:54:38 +03001930 PyErr_SetObject(PyExc_KeyError, module_name);
1931 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001932
1933 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 Py_XDECREF(globals);
1935 Py_XDECREF(builtins);
1936 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001937
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001938 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001939}
1940
Brett Cannon4caa61d2014-01-09 19:03:32 -05001941/*[clinic input]
1942_imp.extension_suffixes
1943
1944Returns the list of file suffixes used to identify extension modules.
1945[clinic start generated code]*/
1946
Brett Cannon4caa61d2014-01-09 19:03:32 -05001947static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001948_imp_extension_suffixes_impl(PyObject *module)
1949/*[clinic end generated code: output=0bf346e25a8f0cd3 input=ecdeeecfcb6f839e]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 PyObject *list;
Brett Cannon2657df42012-05-04 15:20:40 -04001952 const char *suffix;
1953 unsigned int index = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001955 list = PyList_New(0);
1956 if (list == NULL)
1957 return NULL;
Brett Cannon2657df42012-05-04 15:20:40 -04001958#ifdef HAVE_DYNAMIC_LOADING
1959 while ((suffix = _PyImport_DynLoadFiletab[index])) {
1960 PyObject *item = PyUnicode_FromString(suffix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 if (item == NULL) {
1962 Py_DECREF(list);
1963 return NULL;
1964 }
1965 if (PyList_Append(list, item) < 0) {
1966 Py_DECREF(list);
1967 Py_DECREF(item);
1968 return NULL;
1969 }
1970 Py_DECREF(item);
Brett Cannon2657df42012-05-04 15:20:40 -04001971 index += 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 }
Brett Cannon2657df42012-05-04 15:20:40 -04001973#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001975}
1976
Brett Cannon4caa61d2014-01-09 19:03:32 -05001977/*[clinic input]
Brett Cannon4caa61d2014-01-09 19:03:32 -05001978_imp.init_frozen
1979
1980 name: unicode
1981 /
1982
1983Initializes a frozen module.
1984[clinic start generated code]*/
1985
Brett Cannon4caa61d2014-01-09 19:03:32 -05001986static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001987_imp_init_frozen_impl(PyObject *module, PyObject *name)
1988/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/
Brett Cannon4caa61d2014-01-09 19:03:32 -05001989{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001990 int ret;
1991 PyObject *m;
Brett Cannon4caa61d2014-01-09 19:03:32 -05001992
Victor Stinner53dc7352011-03-20 01:50:21 +01001993 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 if (ret < 0)
1995 return NULL;
1996 if (ret == 0) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +02001997 Py_RETURN_NONE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001999 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 Py_XINCREF(m);
2001 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002002}
2003
Brett Cannon4caa61d2014-01-09 19:03:32 -05002004/*[clinic input]
2005_imp.get_frozen_object
2006
2007 name: unicode
2008 /
2009
2010Create a code object for a frozen module.
2011[clinic start generated code]*/
2012
Brett Cannon4caa61d2014-01-09 19:03:32 -05002013static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002014_imp_get_frozen_object_impl(PyObject *module, PyObject *name)
2015/*[clinic end generated code: output=2568cc5b7aa0da63 input=ed689bc05358fdbd]*/
Brett Cannon4caa61d2014-01-09 19:03:32 -05002016{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002018}
2019
Brett Cannon4caa61d2014-01-09 19:03:32 -05002020/*[clinic input]
2021_imp.is_frozen_package
2022
2023 name: unicode
2024 /
2025
2026Returns True if the module name is of a frozen package.
2027[clinic start generated code]*/
2028
Brett Cannon4caa61d2014-01-09 19:03:32 -05002029static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002030_imp_is_frozen_package_impl(PyObject *module, PyObject *name)
2031/*[clinic end generated code: output=e70cbdb45784a1c9 input=81b6cdecd080fbb8]*/
Brett Cannon4caa61d2014-01-09 19:03:32 -05002032{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002033 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00002034}
2035
Brett Cannon4caa61d2014-01-09 19:03:32 -05002036/*[clinic input]
2037_imp.is_builtin
2038
2039 name: unicode
2040 /
2041
2042Returns True if the module name corresponds to a built-in module.
2043[clinic start generated code]*/
2044
Guido van Rossum79f25d91997-04-29 20:08:16 +00002045static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002046_imp_is_builtin_impl(PyObject *module, PyObject *name)
2047/*[clinic end generated code: output=3bfd1162e2d3be82 input=86befdac021dd1c7]*/
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002048{
Brett Cannon4caa61d2014-01-09 19:03:32 -05002049 return PyLong_FromLong(is_builtin(name));
2050}
2051
2052/*[clinic input]
2053_imp.is_frozen
2054
2055 name: unicode
2056 /
2057
2058Returns True if the module name corresponds to a frozen module.
2059[clinic start generated code]*/
2060
Brett Cannon4caa61d2014-01-09 19:03:32 -05002061static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002062_imp_is_frozen_impl(PyObject *module, PyObject *name)
2063/*[clinic end generated code: output=01f408f5ec0f2577 input=7301dbca1897d66b]*/
Brett Cannon4caa61d2014-01-09 19:03:32 -05002064{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07002065 const struct _frozen *p;
Brett Cannon4caa61d2014-01-09 19:03:32 -05002066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 p = find_frozen(name);
2068 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002069}
2070
Larry Hastings1df0b352015-08-24 19:53:56 -07002071/* Common implementation for _imp.exec_dynamic and _imp.exec_builtin */
2072static int
2073exec_builtin_or_dynamic(PyObject *mod) {
2074 PyModuleDef *def;
2075 void *state;
2076
2077 if (!PyModule_Check(mod)) {
2078 return 0;
2079 }
2080
2081 def = PyModule_GetDef(mod);
2082 if (def == NULL) {
Larry Hastings1df0b352015-08-24 19:53:56 -07002083 return 0;
2084 }
Brett Cannon52794db2016-09-07 17:00:43 -07002085
Larry Hastings1df0b352015-08-24 19:53:56 -07002086 state = PyModule_GetState(mod);
Larry Hastings1df0b352015-08-24 19:53:56 -07002087 if (state) {
2088 /* Already initialized; skip reload */
2089 return 0;
2090 }
Brett Cannon52794db2016-09-07 17:00:43 -07002091
Larry Hastings1df0b352015-08-24 19:53:56 -07002092 return PyModule_ExecDef(mod, def);
2093}
2094
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002095#ifdef HAVE_DYNAMIC_LOADING
2096
Brett Cannon4caa61d2014-01-09 19:03:32 -05002097/*[clinic input]
Nick Coghland5cacbb2015-05-23 22:24:10 +10002098_imp.create_dynamic
Brett Cannon4caa61d2014-01-09 19:03:32 -05002099
Nick Coghland5cacbb2015-05-23 22:24:10 +10002100 spec: object
Brett Cannon4caa61d2014-01-09 19:03:32 -05002101 file: object = NULL
2102 /
2103
Nick Coghland5cacbb2015-05-23 22:24:10 +10002104Create an extension module.
Brett Cannon4caa61d2014-01-09 19:03:32 -05002105[clinic start generated code]*/
2106
Brett Cannon4caa61d2014-01-09 19:03:32 -05002107static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002108_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file)
2109/*[clinic end generated code: output=83249b827a4fde77 input=c31b954f4cf4e09d]*/
Brett Cannon4caa61d2014-01-09 19:03:32 -05002110{
Nick Coghland5cacbb2015-05-23 22:24:10 +10002111 PyObject *mod, *name, *path;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002112 FILE *fp;
2113
Nick Coghland5cacbb2015-05-23 22:24:10 +10002114 name = PyObject_GetAttrString(spec, "name");
2115 if (name == NULL) {
2116 return NULL;
2117 }
2118
2119 path = PyObject_GetAttrString(spec, "origin");
2120 if (path == NULL) {
2121 Py_DECREF(name);
2122 return NULL;
2123 }
2124
2125 mod = _PyImport_FindExtensionObject(name, path);
2126 if (mod != NULL) {
2127 Py_DECREF(name);
2128 Py_DECREF(path);
2129 Py_INCREF(mod);
2130 return mod;
2131 }
2132
Brett Cannon4caa61d2014-01-09 19:03:32 -05002133 if (file != NULL) {
2134 fp = _Py_fopen_obj(path, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01002135 if (fp == NULL) {
Nick Coghland5cacbb2015-05-23 22:24:10 +10002136 Py_DECREF(name);
Brett Cannon4caa61d2014-01-09 19:03:32 -05002137 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002138 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01002139 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002140 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002141 else
2142 fp = NULL;
Nick Coghland5cacbb2015-05-23 22:24:10 +10002143
2144 mod = _PyImport_LoadDynamicModuleWithSpec(spec, fp);
2145
2146 Py_DECREF(name);
Brett Cannon4caa61d2014-01-09 19:03:32 -05002147 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 if (fp)
2149 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002150 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002151}
2152
Nick Coghland5cacbb2015-05-23 22:24:10 +10002153/*[clinic input]
2154_imp.exec_dynamic -> int
2155
2156 mod: object
2157 /
2158
2159Initialize an extension module.
2160[clinic start generated code]*/
2161
2162static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002163_imp_exec_dynamic_impl(PyObject *module, PyObject *mod)
2164/*[clinic end generated code: output=f5720ac7b465877d input=9fdbfcb250280d3a]*/
Nick Coghland5cacbb2015-05-23 22:24:10 +10002165{
Larry Hastings1df0b352015-08-24 19:53:56 -07002166 return exec_builtin_or_dynamic(mod);
Nick Coghland5cacbb2015-05-23 22:24:10 +10002167}
2168
2169
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002170#endif /* HAVE_DYNAMIC_LOADING */
2171
Larry Hastings7726ac92014-01-31 22:03:12 -08002172/*[clinic input]
Larry Hastings1df0b352015-08-24 19:53:56 -07002173_imp.exec_builtin -> int
2174
2175 mod: object
2176 /
2177
2178Initialize a built-in module.
2179[clinic start generated code]*/
2180
2181static int
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03002182_imp_exec_builtin_impl(PyObject *module, PyObject *mod)
2183/*[clinic end generated code: output=0262447b240c038e input=7beed5a2f12a60ca]*/
Larry Hastings1df0b352015-08-24 19:53:56 -07002184{
2185 return exec_builtin_or_dynamic(mod);
2186}
2187
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002188/*[clinic input]
2189_imp.source_hash
2190
2191 key: long
2192 source: Py_buffer
2193[clinic start generated code]*/
2194
2195static PyObject *
2196_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source)
2197/*[clinic end generated code: output=edb292448cf399ea input=9aaad1e590089789]*/
2198{
Benjamin Peterson83620772017-12-09 12:18:56 -08002199 union {
2200 uint64_t x;
2201 char data[sizeof(uint64_t)];
2202 } hash;
2203 hash.x = _Py_KeyedHash((uint64_t)key, source->buf, source->len);
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002204#if !PY_LITTLE_ENDIAN
2205 // Force to little-endian. There really ought to be a succinct standard way
2206 // to do this.
Benjamin Peterson83620772017-12-09 12:18:56 -08002207 for (size_t i = 0; i < sizeof(hash.data)/2; i++) {
2208 char tmp = hash.data[i];
2209 hash.data[i] = hash.data[sizeof(hash.data) - i - 1];
2210 hash.data[sizeof(hash.data) - i - 1] = tmp;
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002211 }
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002212#endif
Benjamin Peterson83620772017-12-09 12:18:56 -08002213 return PyBytes_FromStringAndSize(hash.data, sizeof(hash.data));
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002214}
2215
Barry Warsaw28a691b2010-04-17 00:19:56 +00002216
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002217PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04002218"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002219
Guido van Rossum79f25d91997-04-29 20:08:16 +00002220static PyMethodDef imp_methods[] = {
Brett Cannon4caa61d2014-01-09 19:03:32 -05002221 _IMP_EXTENSION_SUFFIXES_METHODDEF
2222 _IMP_LOCK_HELD_METHODDEF
2223 _IMP_ACQUIRE_LOCK_METHODDEF
2224 _IMP_RELEASE_LOCK_METHODDEF
2225 _IMP_GET_FROZEN_OBJECT_METHODDEF
2226 _IMP_IS_FROZEN_PACKAGE_METHODDEF
Nick Coghland5cacbb2015-05-23 22:24:10 +10002227 _IMP_CREATE_BUILTIN_METHODDEF
Brett Cannon4caa61d2014-01-09 19:03:32 -05002228 _IMP_INIT_FROZEN_METHODDEF
2229 _IMP_IS_BUILTIN_METHODDEF
2230 _IMP_IS_FROZEN_METHODDEF
Nick Coghland5cacbb2015-05-23 22:24:10 +10002231 _IMP_CREATE_DYNAMIC_METHODDEF
2232 _IMP_EXEC_DYNAMIC_METHODDEF
Larry Hastings1df0b352015-08-24 19:53:56 -07002233 _IMP_EXEC_BUILTIN_METHODDEF
Brett Cannon4caa61d2014-01-09 19:03:32 -05002234 _IMP__FIX_CO_FILENAME_METHODDEF
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002235 _IMP_SOURCE_HASH_METHODDEF
Brett Cannon4caa61d2014-01-09 19:03:32 -05002236 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002237};
2238
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002239
Martin v. Löwis1a214512008-06-11 05:26:20 +00002240static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04002242 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 doc_imp,
2244 0,
2245 imp_methods,
2246 NULL,
2247 NULL,
2248 NULL,
2249 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002250};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002251
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002252const char *_Py_CheckHashBasedPycsMode = "default";
2253
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002254PyMODINIT_FUNC
Benjamin Petersonc65ef772018-01-29 11:33:57 -08002255PyInit__imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002257 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 m = PyModule_Create(&impmodule);
2260 if (m == NULL)
2261 goto failure;
2262 d = PyModule_GetDict(m);
2263 if (d == NULL)
2264 goto failure;
Benjamin Peterson42aa93b2017-12-09 10:26:52 -08002265 PyObject *pyc_mode = PyUnicode_FromString(_Py_CheckHashBasedPycsMode);
2266 if (pyc_mode == NULL) {
2267 goto failure;
2268 }
2269 if (PyDict_SetItemString(d, "check_hash_based_pycs", pyc_mode) < 0) {
2270 Py_DECREF(pyc_mode);
2271 goto failure;
2272 }
2273 Py_DECREF(pyc_mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002276 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002277 Py_XDECREF(m);
2278 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002279}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002280
2281
Guido van Rossumb18618d2000-05-03 23:44:39 +00002282/* API for embedding applications that want to add their own entries
2283 to the table of built-in modules. This should normally be called
2284 *before* Py_Initialize(). When the table resize fails, -1 is
2285 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002286
2287 After a similar function by Just van Rossum. */
2288
2289int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002290PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 struct _inittab *p;
Benjamin Peterson0c644fc2017-12-15 23:42:33 -08002293 size_t i, n;
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002294 int res = 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 /* Count the number of entries in both tables */
2297 for (n = 0; newtab[n].name != NULL; n++)
2298 ;
2299 if (n == 0)
2300 return 0; /* Nothing to do */
2301 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2302 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002303
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002304 /* Force default raw memory allocator to get a known allocator to be able
2305 to release the memory in _PyImport_Fini2() */
2306 PyMemAllocatorEx old_alloc;
2307 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
2308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 /* Allocate new memory for the combined table */
Benjamin Peterson0c644fc2017-12-15 23:42:33 -08002310 p = NULL;
2311 if (i + n <= SIZE_MAX / sizeof(struct _inittab) - 1) {
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002312 size_t size = sizeof(struct _inittab) * (i + n + 1);
2313 p = PyMem_RawRealloc(inittab_copy, size);
2314 }
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002315 if (p == NULL) {
2316 res = -1;
2317 goto done;
2318 }
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002319
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002320 /* Copy the tables into the new memory at the first call
2321 to PyImport_ExtendInittab(). */
2322 if (inittab_copy != PyImport_Inittab) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002323 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002324 }
2325 memcpy(p + i, newtab, (n + 1) * sizeof(struct _inittab));
2326 PyImport_Inittab = inittab_copy = p;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002327
Victor Stinner92a3c6f2017-12-06 18:12:59 +01002328done:
2329 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
2330 return res;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002331}
2332
2333/* Shorthand to add a single entry given a name and a function */
2334
2335int
Brett Cannona826f322009-04-02 03:41:46 +00002336PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002337{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002338 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002340 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002341
Serhiy Storchaka20b39b22014-09-28 11:27:24 +03002342 newtab[0].name = name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002343 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002346}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002347
2348#ifdef __cplusplus
2349}
2350#endif