blob: a1c0aee54034c337d263128a9ae4420167daadb9 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +00009#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000010#include "code.h"
Antoine Pitroubc07a5c2012-07-08 12:01:27 +020011#include "frameobject.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000012#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000013#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000014
Guido van Rossum55a83382000-09-20 20:31:38 +000015#ifdef HAVE_FCNTL_H
16#include <fcntl.h>
17#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000018#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000019extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000020#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000021
Barry Warsaw28a691b2010-04-17 00:19:56 +000022#define CACHEDIR "__pycache__"
Guido van Rossum96774c12000-05-01 20:19:08 +000023
Victor Stinner95872862011-03-07 18:20:56 +010024/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +000025static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000026
Victor Stinnerfe7c5b52011-04-05 01:48:03 +020027/* Function from Parser/tokenizer.c */
28extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
29
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;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000034
Victor Stinnerd0296212011-03-14 14:04:10 -040035static PyObject *initstr = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +000036
Guido van Rossum1ae940a1995-01-02 19:04:15 +000037/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038
39void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000040_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000041{
Victor Stinnerd0296212011-03-14 14:04:10 -040042 initstr = PyUnicode_InternFromString("__init__");
43 if (initstr == NULL)
44 Py_FatalError("Can't initialize import variables");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000045}
46
Guido van Rossum25ce5661997-08-02 03:10:38 +000047void
Just van Rossum52e14d62002-12-30 22:08:05 +000048_PyImportHooks_Init(void)
49{
Brett Cannonfd074152012-04-14 14:10:13 -040050 PyObject *v, *path_hooks = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000051 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +000052
Brett Cannonfd074152012-04-14 14:10:13 -040053 /* adding sys.path_hooks and sys.path_importer_cache */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054 v = PyList_New(0);
55 if (v == NULL)
56 goto error;
57 err = PySys_SetObject("meta_path", v);
58 Py_DECREF(v);
59 if (err)
60 goto error;
61 v = PyDict_New();
62 if (v == NULL)
63 goto error;
64 err = PySys_SetObject("path_importer_cache", v);
65 Py_DECREF(v);
66 if (err)
67 goto error;
68 path_hooks = PyList_New(0);
69 if (path_hooks == NULL)
70 goto error;
71 err = PySys_SetObject("path_hooks", path_hooks);
72 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +000073 error:
Brett Cannonfd074152012-04-14 14:10:13 -040074 PyErr_Print();
75 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
Nadeem Vawda8f46d652012-05-05 12:27:30 +020076 "or path_importer_cache failed");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 }
Brett Cannonfd074152012-04-14 14:10:13 -040078 Py_DECREF(path_hooks);
79}
80
81void
82_PyImportZip_Init(void)
83{
84 PyObject *path_hooks, *zimpimport;
85 int err = 0;
86
87 path_hooks = PySys_GetObject("path_hooks");
Victor Stinner1e53bba2013-07-16 22:26:05 +020088 if (path_hooks == NULL) {
89 PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks");
Brett Cannonfd074152012-04-14 14:10:13 -040090 goto error;
Victor Stinner1e53bba2013-07-16 22:26:05 +020091 }
Brett Cannonfd074152012-04-14 14:10:13 -040092
93 if (Py_VerboseFlag)
94 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +000095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000096 zimpimport = PyImport_ImportModule("zipimport");
97 if (zimpimport == NULL) {
98 PyErr_Clear(); /* No zip import module -- okay */
99 if (Py_VerboseFlag)
100 PySys_WriteStderr("# can't import zipimport\n");
101 }
102 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200103 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200104 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
105 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000106 Py_DECREF(zimpimport);
107 if (zipimporter == NULL) {
108 PyErr_Clear(); /* No zipimporter object -- okay */
109 if (Py_VerboseFlag)
110 PySys_WriteStderr(
111 "# can't import zipimport.zipimporter\n");
112 }
113 else {
Brett Cannon8923a4d2012-04-24 22:03:46 -0400114 /* sys.path_hooks.insert(0, zipimporter) */
115 err = PyList_Insert(path_hooks, 0, zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000116 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400117 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000118 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400119 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000120 if (Py_VerboseFlag)
121 PySys_WriteStderr(
122 "# installed zipimport hook\n");
123 }
124 }
Brett Cannonfd074152012-04-14 14:10:13 -0400125
126 return;
127
128 error:
129 PyErr_Print();
Brett Cannonacf85cd2012-04-29 12:50:03 -0400130 Py_FatalError("initializing zipimport failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000131}
132
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000133/* Locking primitives to prevent parallel imports of the same module
134 in different threads to return with a partially loaded module.
135 These calls are serialized by the global interpreter lock. */
136
137#ifdef WITH_THREAD
138
Guido van Rossum49b56061998-10-01 20:42:43 +0000139#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000140
Guido van Rossum65d5b571998-12-21 19:32:43 +0000141static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000142static long import_lock_thread = -1;
143static int import_lock_level = 0;
144
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000145void
146_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 long me = PyThread_get_thread_ident();
149 if (me == -1)
150 return; /* Too bad */
151 if (import_lock == NULL) {
152 import_lock = PyThread_allocate_lock();
153 if (import_lock == NULL)
154 return; /* Nothing much we can do. */
155 }
156 if (import_lock_thread == me) {
157 import_lock_level++;
158 return;
159 }
160 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
161 {
162 PyThreadState *tstate = PyEval_SaveThread();
163 PyThread_acquire_lock(import_lock, 1);
164 PyEval_RestoreThread(tstate);
165 }
Antoine Pitrou202b6062012-12-18 22:18:17 +0100166 assert(import_lock_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 import_lock_thread = me;
168 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000169}
170
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000171int
172_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000173{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 long me = PyThread_get_thread_ident();
175 if (me == -1 || import_lock == NULL)
176 return 0; /* Too bad */
177 if (import_lock_thread != me)
178 return -1;
179 import_lock_level--;
Antoine Pitrou202b6062012-12-18 22:18:17 +0100180 assert(import_lock_level >= 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000181 if (import_lock_level == 0) {
182 import_lock_thread = -1;
183 PyThread_release_lock(import_lock);
184 }
185 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000186}
187
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000188/* This function is called from PyOS_AfterFork to ensure that newly
189 created child processes do not share locks with the parent.
190 We now acquire the import lock around fork() calls but on some platforms
191 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000192
193void
194_PyImport_ReInitLock(void)
195{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 if (import_lock != NULL)
197 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000198 if (import_lock_level > 1) {
199 /* Forked as a side effect of import */
200 long me = PyThread_get_thread_ident();
Brett Cannone4710cf2012-11-15 21:39:36 -0500201 /* The following could fail if the lock is already held, but forking as
202 a side-effect of an import is a) rare, b) nuts, and c) difficult to
203 do thanks to the lock only being held when doing individual module
204 locks per import. */
205 PyThread_acquire_lock(import_lock, NOWAIT_LOCK);
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000206 import_lock_thread = me;
207 import_lock_level--;
208 } else {
209 import_lock_thread = -1;
210 import_lock_level = 0;
211 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000212}
213
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000214#endif
215
Tim Peters69232342001-08-30 05:16:13 +0000216static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000217imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000218{
Tim Peters69232342001-08-30 05:16:13 +0000219#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000220 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000221#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000223#endif
224}
225
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000226static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000227imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000228{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000229#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000230 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000231#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 Py_INCREF(Py_None);
233 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000234}
235
236static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000237imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000238{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000239#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 if (_PyImport_ReleaseLock() < 0) {
241 PyErr_SetString(PyExc_RuntimeError,
242 "not holding the import lock");
243 return NULL;
244 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000245#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000246 Py_INCREF(Py_None);
247 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000248}
249
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100250void
251_PyImport_Fini(void)
252{
253 Py_XDECREF(extensions);
254 extensions = NULL;
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100255#ifdef WITH_THREAD
256 if (import_lock != NULL) {
257 PyThread_free_lock(import_lock);
258 import_lock = NULL;
259 }
260#endif
261}
262
Guido van Rossum25ce5661997-08-02 03:10:38 +0000263/* Helper for sys */
264
265PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000266PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000267{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000268 PyInterpreterState *interp = PyThreadState_GET()->interp;
269 if (interp->modules == NULL)
270 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
271 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000272}
273
Guido van Rossum3f5da241990-12-20 15:06:42 +0000274
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000275/* List of names to clear in sys */
276static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 "path", "argv", "ps1", "ps2",
278 "last_type", "last_value", "last_traceback",
279 "path_hooks", "path_importer_cache", "meta_path",
280 /* misc stuff */
281 "flags", "float_info",
282 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000283};
284
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000285static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000286 "stdin", "__stdin__",
287 "stdout", "__stdout__",
288 "stderr", "__stderr__",
289 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000290};
291
Antoine Pitrou070cb3c2013-05-08 13:23:25 +0200292static int
293is_essential_module(PyObject *name)
294{
295 Py_ssize_t name_len;
296 char *name_str = PyUnicode_AsUTF8AndSize(name, &name_len);
297
298 if (name_str == NULL) {
299 PyErr_Clear();
300 return 0;
301 }
302 if (strcmp(name_str, "builtins") == 0)
303 return 1;
304 if (strcmp(name_str, "sys") == 0)
305 return 1;
306 /* These are all needed for stderr to still function */
307 if (strcmp(name_str, "codecs") == 0)
308 return 1;
309 if (strcmp(name_str, "_codecs") == 0)
310 return 1;
311 if (strncmp(name_str, "encodings.", 10) == 0)
312 return 1;
313 return 0;
314}
315
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000316
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000317/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000318
Guido van Rossum3f5da241990-12-20 15:06:42 +0000319void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000320PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000321{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 PyObject *key, *value, *dict;
324 PyInterpreterState *interp = PyThreadState_GET()->interp;
325 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000326
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 if (modules == NULL)
328 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 /* Delete some special variables first. These are common
331 places where user values hide and people complain when their
332 destructors fail. Since the modules containing them are
333 deleted *last* of all, they would come too late in the normal
334 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 value = PyDict_GetItemString(modules, "builtins");
337 if (value != NULL && PyModule_Check(value)) {
338 dict = PyModule_GetDict(value);
339 if (Py_VerboseFlag)
340 PySys_WriteStderr("# clear builtins._\n");
341 PyDict_SetItemString(dict, "_", Py_None);
342 }
343 value = PyDict_GetItemString(modules, "sys");
344 if (value != NULL && PyModule_Check(value)) {
345 char **p;
346 PyObject *v;
347 dict = PyModule_GetDict(value);
348 for (p = sys_deletes; *p != NULL; p++) {
349 if (Py_VerboseFlag)
350 PySys_WriteStderr("# clear sys.%s\n", *p);
351 PyDict_SetItemString(dict, *p, Py_None);
352 }
353 for (p = sys_files; *p != NULL; p+=2) {
354 if (Py_VerboseFlag)
355 PySys_WriteStderr("# restore sys.%s\n", *p);
356 v = PyDict_GetItemString(dict, *(p+1));
357 if (v == NULL)
358 v = Py_None;
359 PyDict_SetItemString(dict, *p, v);
360 }
361 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 /* First, delete __main__ */
364 value = PyDict_GetItemString(modules, "__main__");
365 if (value != NULL && PyModule_Check(value)) {
366 if (Py_VerboseFlag)
367 PySys_WriteStderr("# cleanup __main__\n");
368 _PyModule_Clear(value);
369 PyDict_SetItemString(modules, "__main__", Py_None);
370 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 /* The special treatment of "builtins" here is because even
373 when it's not referenced as a module, its dictionary is
374 referenced by almost every module's __builtins__. Since
375 deleting a module clears its dictionary (even if there are
376 references left to it), we need to delete the "builtins"
377 module last. Likewise, we don't delete sys until the very
378 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 Also note that we 'delete' modules by replacing their entry
381 in the modules dict with None, rather than really deleting
382 them; this avoids a rehash of the modules dictionary and
383 also marks them as "non existent" so they won't be
384 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 /* Next, repeatedly delete modules with a reference count of
387 one (skipping builtins and sys) and delete them */
388 do {
389 ndone = 0;
390 pos = 0;
391 while (PyDict_Next(modules, &pos, &key, &value)) {
392 if (value->ob_refcnt != 1)
393 continue;
394 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Antoine Pitrou070cb3c2013-05-08 13:23:25 +0200395 if (is_essential_module(key))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 continue;
397 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100398 PySys_FormatStderr(
399 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 _PyModule_Clear(value);
401 PyDict_SetItem(modules, key, Py_None);
402 ndone++;
403 }
404 }
405 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 /* Next, delete all modules (still skipping builtins and sys) */
408 pos = 0;
409 while (PyDict_Next(modules, &pos, &key, &value)) {
410 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Antoine Pitrou070cb3c2013-05-08 13:23:25 +0200411 if (is_essential_module(key))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000412 continue;
413 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100414 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 _PyModule_Clear(value);
416 PyDict_SetItem(modules, key, Py_None);
417 }
418 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000419
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200420 /* Collect garbage remaining after deleting the modules. Mostly
421 reference cycles created by classes. */
422 PyGC_Collect();
423
424 /* Dump GC stats before it's too late, since it uses the warnings
425 machinery. */
426 _PyGC_DumpShutdownStats();
427
Antoine Pitrou070cb3c2013-05-08 13:23:25 +0200428 /* Next, delete all remaining modules */
429 pos = 0;
430 while (PyDict_Next(modules, &pos, &key, &value)) {
431 if (PyUnicode_Check(key) && PyModule_Check(value)) {
432 if (Py_VerboseFlag)
433 PySys_FormatStderr("# cleanup[3] %U\n", key);
434 _PyModule_Clear(value);
435 PyDict_SetItem(modules, key, Py_None);
436 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000437 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 /* Finally, clear and delete the modules directory */
440 PyDict_Clear(modules);
Antoine Pitroufef34e32013-05-19 01:11:58 +0200441 _PyGC_CollectNoFail();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000442 interp->modules = NULL;
443 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000444}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000445
446
Barry Warsaw28a691b2010-04-17 00:19:56 +0000447/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000448
449long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000450PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000451{
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200452 long res;
Brett Cannon77b2abd2012-07-09 16:09:00 -0400453 PyInterpreterState *interp = PyThreadState_Get()->interp;
454 PyObject *pyc_magic = PyObject_GetAttrString(interp->importlib,
455 "_RAW_MAGIC_NUMBER");
456 if (pyc_magic == NULL)
457 return -1;
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200458 res = PyLong_AsLong(pyc_magic);
Benjamin Peterson66f36592012-07-09 22:21:55 -0700459 Py_DECREF(pyc_magic);
460 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000461}
462
463
Brett Cannon3adc7b72012-07-09 14:22:12 -0400464extern const char * _PySys_ImplCacheTag;
465
Barry Warsaw28a691b2010-04-17 00:19:56 +0000466const char *
467PyImport_GetMagicTag(void)
468{
Brett Cannon3adc7b72012-07-09 14:22:12 -0400469 return _PySys_ImplCacheTag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000470}
471
Brett Cannon98979b82012-07-02 15:13:11 -0400472
Guido van Rossum25ce5661997-08-02 03:10:38 +0000473/* Magic for extension modules (built-in as well as dynamically
474 loaded). To prevent initializing an extension module more than
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200475 once, we keep a static dictionary 'extensions' keyed by the tuple
476 (module name, module name) (for built-in modules) or by
477 (filename, module name) (for dynamically loaded modules), containing these
478 modules. A copy of the module's dictionary is stored by calling
479 _PyImport_FixupExtensionObject() immediately after the module initialization
480 function succeeds. A copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100481 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000482
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000483 Modules which do support multiple initialization set their m_size
484 field to a non-negative number (indicating the size of the
485 module-specific state). They are still recorded in the extensions
486 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000487*/
488
489int
Victor Stinner95872862011-03-07 18:20:56 +0100490_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
491 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000492{
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500493 PyObject *modules, *dict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 struct PyModuleDef *def;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500495 int res;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000496 if (extensions == NULL) {
497 extensions = PyDict_New();
498 if (extensions == NULL)
499 return -1;
500 }
501 if (mod == NULL || !PyModule_Check(mod)) {
502 PyErr_BadInternalCall();
503 return -1;
504 }
505 def = PyModule_GetDef(mod);
506 if (!def) {
507 PyErr_BadInternalCall();
508 return -1;
509 }
510 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100511 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 return -1;
513 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100514 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 return -1;
516 }
517 if (def->m_size == -1) {
518 if (def->m_base.m_copy) {
519 /* Somebody already imported the module,
520 likely under a different name.
521 XXX this should really not happen. */
522 Py_DECREF(def->m_base.m_copy);
523 def->m_base.m_copy = NULL;
524 }
525 dict = PyModule_GetDict(mod);
526 if (dict == NULL)
527 return -1;
528 def->m_base.m_copy = PyDict_Copy(dict);
529 if (def->m_base.m_copy == NULL)
530 return -1;
531 }
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500532 key = PyTuple_Pack(2, filename, name);
533 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200534 return -1;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500535 res = PyDict_SetItem(extensions, key, (PyObject *)def);
536 Py_DECREF(key);
537 if (res < 0)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200538 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540}
541
Victor Stinner49d3f252010-10-17 01:24:53 +0000542int
543_PyImport_FixupBuiltin(PyObject *mod, char *name)
544{
545 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100546 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100547 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100548 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000549 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100550 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
551 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000552 return res;
553}
554
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100556_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000557{
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500558 PyObject *mod, *mdict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 PyModuleDef* def;
560 if (extensions == NULL)
561 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500562 key = PyTuple_Pack(2, filename, name);
563 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200564 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500565 def = (PyModuleDef *)PyDict_GetItem(extensions, key);
566 Py_DECREF(key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 if (def == NULL)
568 return NULL;
569 if (def->m_size == -1) {
570 /* Module does not support repeated initialization */
571 if (def->m_base.m_copy == NULL)
572 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100573 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 if (mod == NULL)
575 return NULL;
576 mdict = PyModule_GetDict(mod);
577 if (mdict == NULL)
578 return NULL;
579 if (PyDict_Update(mdict, def->m_base.m_copy))
580 return NULL;
581 }
582 else {
583 if (def->m_base.m_init == NULL)
584 return NULL;
585 mod = def->m_base.m_init();
586 if (mod == NULL)
587 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100588 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 Py_DECREF(mod);
590 }
591 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100592 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 Py_DECREF(mod);
594 return NULL;
595 }
596 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100597 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000598 name, filename);
599 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000600
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000601}
602
Victor Stinner49d3f252010-10-17 01:24:53 +0000603PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000604_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000605{
Victor Stinner95872862011-03-07 18:20:56 +0100606 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100607 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100608 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000609 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100610 res = _PyImport_FindExtensionObject(nameobj, nameobj);
611 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000612 return res;
613}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614
615/* Get the module object corresponding to a module name.
616 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000617 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000618 Because the former action is most common, THIS DOES NOT RETURN A
619 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000622PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000623{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 PyObject *modules = PyImport_GetModuleDict();
625 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626
Victor Stinner27ee0892011-03-04 12:57:09 +0000627 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 PyModule_Check(m))
629 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000630 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 if (m == NULL)
632 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000633 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 Py_DECREF(m);
635 return NULL;
636 }
637 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640}
641
Victor Stinner27ee0892011-03-04 12:57:09 +0000642PyObject *
643PyImport_AddModule(const char *name)
644{
645 PyObject *nameobj, *module;
646 nameobj = PyUnicode_FromString(name);
647 if (nameobj == NULL)
648 return NULL;
649 module = PyImport_AddModuleObject(nameobj);
650 Py_DECREF(nameobj);
651 return module;
652}
653
654
Tim Peters1cd70172004-08-02 03:52:12 +0000655/* Remove name from sys.modules, if it's there. */
656static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000657remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000658{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000660 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000662 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 Py_FatalError("import: deleting existing key in"
664 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000665}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000666
Christian Heimes3b06e532008-01-07 20:12:44 +0000667
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000668/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000669 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
670 * removed from sys.modules, to avoid leaving damaged module objects
671 * in sys.modules. The caller may wish to restore the original
672 * module object (if any) in this case; PyImport_ReloadModule is an
673 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000674 *
675 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
676 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000677 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000679PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 return PyImport_ExecCodeModuleWithPathnames(
682 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000683}
684
685PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000686PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000687{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 return PyImport_ExecCodeModuleWithPathnames(
689 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000690}
691
692PyObject *
693PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000695{
Victor Stinner27ee0892011-03-04 12:57:09 +0000696 PyObject *m = NULL;
697 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
698
699 nameobj = PyUnicode_FromString(name);
700 if (nameobj == NULL)
701 return NULL;
702
Victor Stinner27ee0892011-03-04 12:57:09 +0000703 if (cpathname != NULL) {
704 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
705 if (cpathobj == NULL)
706 goto error;
Brett Cannona6473f92012-07-13 13:57:03 -0400707 }
708 else
Victor Stinner27ee0892011-03-04 12:57:09 +0000709 cpathobj = NULL;
Brett Cannona6473f92012-07-13 13:57:03 -0400710
711 if (pathname != NULL) {
712 pathobj = PyUnicode_DecodeFSDefault(pathname);
713 if (pathobj == NULL)
714 goto error;
715 }
716 else if (cpathobj != NULL) {
717 PyInterpreterState *interp = PyThreadState_GET()->interp;
718 _Py_IDENTIFIER(_get_sourcefile);
719
720 if (interp == NULL) {
721 Py_FatalError("PyImport_ExecCodeModuleWithPathnames: "
722 "no interpreter!");
723 }
724
Alexandre Vassalotti865eaa12013-05-02 10:44:04 -0700725 pathobj = _PyObject_CallMethodIdObjArgs(interp->importlib,
Brett Cannona6473f92012-07-13 13:57:03 -0400726 &PyId__get_sourcefile, cpathobj,
727 NULL);
728 if (pathobj == NULL)
729 PyErr_Clear();
730 }
731 else
732 pathobj = NULL;
733
Victor Stinner27ee0892011-03-04 12:57:09 +0000734 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
735error:
736 Py_DECREF(nameobj);
737 Py_XDECREF(pathobj);
738 Py_XDECREF(cpathobj);
739 return m;
740}
741
742PyObject*
743PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
744 PyObject *cpathname)
745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 PyObject *modules = PyImport_GetModuleDict();
747 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748
Victor Stinner27ee0892011-03-04 12:57:09 +0000749 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 if (m == NULL)
751 return NULL;
752 /* If the module is being reloaded, we get the old module back
753 and re-use its dict to exec the new code. */
754 d = PyModule_GetDict(m);
755 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
756 if (PyDict_SetItemString(d, "__builtins__",
757 PyEval_GetBuiltins()) != 0)
758 goto error;
759 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 if (pathname != NULL) {
Brett Cannona6473f92012-07-13 13:57:03 -0400761 v = pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 }
Brett Cannona6473f92012-07-13 13:57:03 -0400763 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 v = ((PyCodeObject *)co)->co_filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 }
Brett Cannona6473f92012-07-13 13:57:03 -0400766 Py_INCREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 if (PyDict_SetItemString(d, "__file__", v) != 0)
768 PyErr_Clear(); /* Not important enough to report */
769 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000772 if (cpathname != NULL)
773 v = cpathname;
774 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 if (PyDict_SetItemString(d, "__cached__", v) != 0)
777 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000778
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000779 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 if (v == NULL)
781 goto error;
782 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000783
Victor Stinner27ee0892011-03-04 12:57:09 +0000784 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000786 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 name);
788 return NULL;
789 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000794
795 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 remove_module(name);
797 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000798}
799
800
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000801static void
802update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
803{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000804 PyObject *constants, *tmp;
805 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 if (PyUnicode_Compare(co->co_filename, oldname))
808 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000809
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 tmp = co->co_filename;
811 co->co_filename = newname;
812 Py_INCREF(co->co_filename);
813 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 constants = co->co_consts;
816 n = PyTuple_GET_SIZE(constants);
817 for (i = 0; i < n; i++) {
818 tmp = PyTuple_GET_ITEM(constants, i);
819 if (PyCode_Check(tmp))
820 update_code_filenames((PyCodeObject *)tmp,
821 oldname, newname);
822 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000823}
824
Victor Stinner2f42ae52011-03-20 00:41:24 +0100825static void
826update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000827{
Victor Stinner2f42ae52011-03-20 00:41:24 +0100828 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000829
Victor Stinner2f42ae52011-03-20 00:41:24 +0100830 if (PyUnicode_Compare(co->co_filename, newname) == 0)
831 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000832
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 oldname = co->co_filename;
834 Py_INCREF(oldname);
835 update_code_filenames(co, oldname, newname);
836 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000837}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838
Brett Cannon442c9b92011-03-23 16:14:42 -0700839static PyObject *
840imp_fix_co_filename(PyObject *self, PyObject *args)
841{
842 PyObject *co;
843 PyObject *file_path;
844
845 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
846 return NULL;
847
848 if (!PyCode_Check(co)) {
849 PyErr_SetString(PyExc_TypeError,
850 "first argument must be a code object");
851 return NULL;
852 }
853
854 if (!PyUnicode_Check(file_path)) {
855 PyErr_SetString(PyExc_TypeError,
856 "second argument must be a string");
857 return NULL;
858 }
859
860 update_compiled_module((PyCodeObject*)co, file_path);
861
862 Py_RETURN_NONE;
863}
864
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000866/* Forward */
Benjamin Peterson6fba3db2013-03-18 23:13:31 -0700867static const struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000868
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000869
870/* Helper to test for built-in module */
871
872static int
Victor Stinner95872862011-03-07 18:20:56 +0100873is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000874{
Victor Stinner95872862011-03-07 18:20:56 +0100875 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +0100877 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
878 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 if (PyImport_Inittab[i].initfunc == NULL)
880 return -1;
881 else
882 return 1;
883 }
884 }
885 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000886}
887
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000888
Just van Rossum52e14d62002-12-30 22:08:05 +0000889/* Return an importer object for a sys.path/pkg.__path__ item 'p',
890 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +0000891 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +0000892 that can handle the path item. Return None if no hook could;
893 this tells our caller it should fall back to the builtin
894 import mechanism. Cache the result in path_importer_cache.
895 Returns a borrowed reference. */
896
897static PyObject *
898get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +0000900{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 PyObject *importer;
902 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +0000903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 /* These conditions are the caller's responsibility: */
905 assert(PyList_Check(path_hooks));
906 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +0000907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 nhooks = PyList_Size(path_hooks);
909 if (nhooks < 0)
910 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +0000911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 importer = PyDict_GetItem(path_importer_cache, p);
913 if (importer != NULL)
914 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +0000915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000916 /* set path_importer_cache[p] to None to avoid recursion */
917 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
918 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +0000919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000920 for (j = 0; j < nhooks; j++) {
921 PyObject *hook = PyList_GetItem(path_hooks, j);
922 if (hook == NULL)
923 return NULL;
924 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
925 if (importer != NULL)
926 break;
Just van Rossum52e14d62002-12-30 22:08:05 +0000927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
929 return NULL;
930 }
931 PyErr_Clear();
932 }
933 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -0400934 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 }
936 if (importer != NULL) {
937 int err = PyDict_SetItem(path_importer_cache, p, importer);
938 Py_DECREF(importer);
939 if (err != 0)
940 return NULL;
941 }
942 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +0000943}
944
Christian Heimes9cd17752007-11-18 19:35:23 +0000945PyAPI_FUNC(PyObject *)
946PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +0000948
Victor Stinner1e53bba2013-07-16 22:26:05 +0200949 path_importer_cache = PySys_GetObject("path_importer_cache");
950 path_hooks = PySys_GetObject("path_hooks");
951 if (path_importer_cache != NULL && path_hooks != NULL) {
952 importer = get_path_importer(path_importer_cache,
953 path_hooks, path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 }
955 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
956 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +0000957}
958
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000959
Victor Stinner95872862011-03-07 18:20:56 +0100960static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000961
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +0000963 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000964 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000965
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000966static int
Victor Stinner95872862011-03-07 18:20:56 +0100967init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000968{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000970
Victor Stinner95872862011-03-07 18:20:56 +0100971 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 for (p = PyImport_Inittab; p->name != NULL; p++) {
975 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +0100976 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +0100977 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 if (p->initfunc == NULL) {
979 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +0100980 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 name);
982 return -1;
983 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 mod = (*p->initfunc)();
985 if (mod == 0)
986 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +0100987 /* Remember pointer to module init function. */
988 def = PyModule_GetDef(mod);
989 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +0100990 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 return -1;
992 /* FixupExtension has put the module into sys.modules,
993 so we can release our own reference. */
994 Py_DECREF(mod);
995 return 1;
996 }
997 }
998 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000999}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001000
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001002/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001004static const struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01001005find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001006{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001007 const struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001008
Victor Stinner53dc7352011-03-20 01:50:21 +01001009 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00001011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 for (p = PyImport_FrozenModules; ; p++) {
1013 if (p->name == NULL)
1014 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001015 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001016 break;
1017 }
1018 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001019}
1020
Guido van Rossum79f25d91997-04-29 20:08:16 +00001021static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001022get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001023{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001024 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 if (p == NULL) {
1028 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001029 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 name);
1031 return NULL;
1032 }
1033 if (p->code == NULL) {
1034 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001035 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 name);
1037 return NULL;
1038 }
1039 size = p->size;
1040 if (size < 0)
1041 size = -size;
1042 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001043}
1044
Brett Cannon8d110132009-03-15 02:20:16 +00001045static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001046is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001047{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001048 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 if (p == NULL) {
1052 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001053 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001054 name);
1055 return NULL;
1056 }
Brett Cannon8d110132009-03-15 02:20:16 +00001057
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 if (size < 0)
1061 Py_RETURN_TRUE;
1062 else
1063 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001064}
1065
1066
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001067/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001068 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001069 an exception set if the initialization failed.
1070 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001071
1072int
Victor Stinner53dc7352011-03-20 01:50:21 +01001073PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001074{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001075 const struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001076 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 int ispackage;
1078 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001079
Victor Stinner53dc7352011-03-20 01:50:21 +01001080 p = find_frozen(name);
1081
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 if (p == NULL)
1083 return 0;
1084 if (p->code == NULL) {
1085 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001086 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 name);
1088 return -1;
1089 }
1090 size = p->size;
1091 ispackage = (size < 0);
1092 if (ispackage)
1093 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1095 if (co == NULL)
1096 return -1;
1097 if (!PyCode_Check(co)) {
1098 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001099 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 name);
1101 goto err_return;
1102 }
1103 if (ispackage) {
Brett Cannon3e0651b2013-05-31 23:18:39 -04001104 /* Set __path__ to the empty list */
Victor Stinner53dc7352011-03-20 01:50:21 +01001105 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001107 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 if (m == NULL)
1109 goto err_return;
1110 d = PyModule_GetDict(m);
Brett Cannon3e0651b2013-05-31 23:18:39 -04001111 l = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 goto err_return;
1114 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 err = PyDict_SetItemString(d, "__path__", l);
1116 Py_DECREF(l);
1117 if (err != 0)
1118 goto err_return;
1119 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001120 path = PyUnicode_FromString("<frozen>");
1121 if (path == NULL)
1122 goto err_return;
1123 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
1124 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 if (m == NULL)
1126 goto err_return;
1127 Py_DECREF(co);
1128 Py_DECREF(m);
1129 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001130err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 Py_DECREF(co);
1132 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001133}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001134
Victor Stinner53dc7352011-03-20 01:50:21 +01001135int
1136PyImport_ImportFrozenModule(char *name)
1137{
1138 PyObject *nameobj;
1139 int ret;
1140 nameobj = PyUnicode_InternFromString(name);
1141 if (nameobj == NULL)
1142 return -1;
1143 ret = PyImport_ImportFrozenModuleObject(nameobj);
1144 Py_DECREF(nameobj);
1145 return ret;
1146}
1147
Guido van Rossum74e6a111994-08-29 12:54:38 +00001148
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001149/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001150 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001151
Guido van Rossum79f25d91997-04-29 20:08:16 +00001152PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001153PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 PyObject *pname;
1156 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 pname = PyUnicode_FromString(name);
1159 if (pname == NULL)
1160 return NULL;
1161 result = PyImport_Import(pname);
1162 Py_DECREF(pname);
1163 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001164}
1165
Christian Heimes072c0f12008-01-03 23:01:04 +00001166/* Import a module without blocking
1167 *
1168 * At first it tries to fetch the module from sys.modules. If the module was
1169 * never loaded before it loads it with PyImport_ImportModule() unless another
1170 * thread holds the import lock. In the latter case the function raises an
1171 * ImportError instead of blocking.
1172 *
1173 * Returns the module object with incremented ref count.
1174 */
1175PyObject *
1176PyImport_ImportModuleNoBlock(const char *name)
1177{
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001178 return PyImport_ImportModule(name);
Christian Heimes072c0f12008-01-03 23:01:04 +00001179}
1180
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001181
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001182/* Remove importlib frames from the traceback,
1183 * except in Verbose mode. */
1184static void
1185remove_importlib_frames(void)
1186{
1187 const char *importlib_filename = "<frozen importlib._bootstrap>";
Nick Coghlan42c07662012-07-31 21:14:18 +10001188 const char *remove_frames = "_call_with_frames_removed";
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001189 int always_trim = 0;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001190 int in_importlib = 0;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001191 PyObject *exception, *value, *base_tb, *tb;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001192 PyObject **prev_link, **outer_link = NULL;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001193
1194 /* Synopsis: if it's an ImportError, we trim all importlib chunks
Nick Coghlan42c07662012-07-31 21:14:18 +10001195 from the traceback. We always trim chunks
1196 which end with a call to "_call_with_frames_removed". */
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001197
1198 PyErr_Fetch(&exception, &value, &base_tb);
1199 if (!exception || Py_VerboseFlag)
1200 goto done;
1201 if (PyType_IsSubtype((PyTypeObject *) exception,
1202 (PyTypeObject *) PyExc_ImportError))
1203 always_trim = 1;
1204
1205 prev_link = &base_tb;
1206 tb = base_tb;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001207 while (tb != NULL) {
1208 PyTracebackObject *traceback = (PyTracebackObject *)tb;
1209 PyObject *next = (PyObject *) traceback->tb_next;
1210 PyFrameObject *frame = traceback->tb_frame;
1211 PyCodeObject *code = frame->f_code;
1212 int now_in_importlib;
1213
1214 assert(PyTraceBack_Check(tb));
1215 now_in_importlib = (PyUnicode_CompareWithASCIIString(
1216 code->co_filename,
1217 importlib_filename) == 0);
1218 if (now_in_importlib && !in_importlib) {
1219 /* This is the link to this chunk of importlib tracebacks */
1220 outer_link = prev_link;
1221 }
1222 in_importlib = now_in_importlib;
1223
1224 if (in_importlib &&
1225 (always_trim ||
Nick Coghlan42c07662012-07-31 21:14:18 +10001226 PyUnicode_CompareWithASCIIString(code->co_name,
1227 remove_frames) == 0)) {
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001228 PyObject *tmp = *outer_link;
1229 *outer_link = next;
1230 Py_XINCREF(next);
1231 Py_DECREF(tmp);
1232 prev_link = outer_link;
1233 }
1234 else {
1235 prev_link = (PyObject **) &traceback->tb_next;
1236 }
1237 tb = next;
1238 }
1239done:
1240 PyErr_Restore(exception, value, base_tb);
1241}
1242
1243
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001244PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04001245PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
1246 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001247 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001248{
Brett Cannonfd074152012-04-14 14:10:13 -04001249 _Py_IDENTIFIER(__import__);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001250 _Py_IDENTIFIER(__initializing__);
Brett Cannonfd074152012-04-14 14:10:13 -04001251 _Py_IDENTIFIER(__package__);
1252 _Py_IDENTIFIER(__path__);
1253 _Py_IDENTIFIER(__name__);
1254 _Py_IDENTIFIER(_find_and_load);
1255 _Py_IDENTIFIER(_handle_fromlist);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001256 _Py_IDENTIFIER(_lock_unlock_module);
Brett Cannonfd074152012-04-14 14:10:13 -04001257 _Py_static_string(single_dot, ".");
1258 PyObject *abs_name = NULL;
1259 PyObject *builtins_import = NULL;
1260 PyObject *final_mod = NULL;
1261 PyObject *mod = NULL;
1262 PyObject *package = NULL;
1263 PyObject *globals = NULL;
1264 PyObject *fromlist = NULL;
1265 PyInterpreterState *interp = PyThreadState_GET()->interp;
1266
1267 /* Make sure to use default values so as to not have
1268 PyObject_CallMethodObjArgs() truncate the parameter list because of a
1269 NULL argument. */
1270 if (given_globals == NULL) {
1271 globals = PyDict_New();
1272 if (globals == NULL) {
1273 goto error;
1274 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 }
Brett Cannonfd074152012-04-14 14:10:13 -04001276 else {
1277 /* Only have to care what given_globals is if it will be used
Brett Cannonecfefb72012-08-05 19:24:57 -04001278 for something. */
Brett Cannonfd074152012-04-14 14:10:13 -04001279 if (level > 0 && !PyDict_Check(given_globals)) {
1280 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1281 goto error;
1282 }
1283 globals = given_globals;
1284 Py_INCREF(globals);
1285 }
1286
1287 if (given_fromlist == NULL) {
1288 fromlist = PyList_New(0);
1289 if (fromlist == NULL) {
1290 goto error;
1291 }
1292 }
1293 else {
1294 fromlist = given_fromlist;
1295 Py_INCREF(fromlist);
1296 }
1297 if (name == NULL) {
1298 PyErr_SetString(PyExc_ValueError, "Empty module name");
1299 goto error;
1300 }
1301
1302 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1303 for added performance. */
1304
1305 if (!PyUnicode_Check(name)) {
1306 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1307 goto error;
1308 }
1309 else if (PyUnicode_READY(name) < 0) {
1310 goto error;
1311 }
1312 if (level < 0) {
1313 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1314 goto error;
1315 }
1316 else if (level > 0) {
1317 package = _PyDict_GetItemId(globals, &PyId___package__);
1318 if (package != NULL && package != Py_None) {
1319 Py_INCREF(package);
1320 if (!PyUnicode_Check(package)) {
1321 PyErr_SetString(PyExc_TypeError, "package must be a string");
1322 goto error;
1323 }
1324 }
1325 else {
Brett Cannon273323c2012-04-17 19:05:11 -04001326 package = _PyDict_GetItemId(globals, &PyId___name__);
Brett Cannonfd074152012-04-14 14:10:13 -04001327 if (package == NULL) {
Brett Cannon273323c2012-04-17 19:05:11 -04001328 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
Brett Cannonfd074152012-04-14 14:10:13 -04001329 goto error;
1330 }
1331 else if (!PyUnicode_Check(package)) {
1332 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1333 }
1334 Py_INCREF(package);
1335
1336 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04001337 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001338 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1339 if (borrowed_dot == NULL) {
1340 goto error;
1341 }
Brett Cannon740fce02012-04-14 14:23:49 -04001342 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001343 Py_DECREF(package);
1344 if (partition == NULL) {
1345 goto error;
1346 }
1347 package = PyTuple_GET_ITEM(partition, 0);
1348 Py_INCREF(package);
1349 Py_DECREF(partition);
1350 }
1351 }
1352
1353 if (PyDict_GetItem(interp->modules, package) == NULL) {
1354 PyErr_Format(PyExc_SystemError,
1355 "Parent module %R not loaded, cannot perform relative "
1356 "import", package);
1357 goto error;
1358 }
1359 }
1360 else { /* level == 0 */
1361 if (PyUnicode_GET_LENGTH(name) == 0) {
1362 PyErr_SetString(PyExc_ValueError, "Empty module name");
1363 goto error;
1364 }
1365 package = Py_None;
1366 Py_INCREF(package);
1367 }
1368
1369 if (level > 0) {
1370 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
1371 PyObject *base = NULL;
1372 int level_up = 1;
1373
1374 for (level_up = 1; level_up < level; level_up += 1) {
1375 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1376 if (last_dot == -2) {
1377 goto error;
1378 }
1379 else if (last_dot == -1) {
1380 PyErr_SetString(PyExc_ValueError,
1381 "attempted relative import beyond top-level "
1382 "package");
1383 goto error;
1384 }
1385 }
1386 base = PyUnicode_Substring(package, 0, last_dot);
1387 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001388 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001389
1390 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001391 seq = PyTuple_Pack(2, base, name);
1392 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04001393 if (borrowed_dot == NULL || seq == NULL) {
1394 goto error;
1395 }
1396
1397 abs_name = PyUnicode_Join(borrowed_dot, seq);
1398 Py_DECREF(seq);
1399 if (abs_name == NULL) {
1400 goto error;
1401 }
1402 }
1403 else {
1404 abs_name = base;
1405 }
1406 }
1407 else {
1408 abs_name = name;
1409 Py_INCREF(abs_name);
1410 }
1411
Brian Curtine6b299f2012-04-14 14:19:33 -05001412#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001413 _PyImport_AcquireLock();
1414#endif
1415 /* From this point forward, goto error_with_unlock! */
1416 if (PyDict_Check(globals)) {
1417 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
1418 }
1419 if (builtins_import == NULL) {
1420 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
1421 if (builtins_import == NULL) {
Benjamin Peterson7d110042013-04-29 09:08:14 -04001422 PyErr_SetString(PyExc_ImportError, "__import__ not found");
1423 goto error_with_unlock;
Brett Cannonfd074152012-04-14 14:10:13 -04001424 }
1425 }
1426 Py_INCREF(builtins_import);
1427
1428 mod = PyDict_GetItem(interp->modules, abs_name);
1429 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04001430 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
1431 "None in sys.modules", abs_name);
1432 if (msg != NULL) {
Brett Cannon82da8882013-07-04 17:48:16 -04001433 PyErr_SetImportError(msg, abs_name, NULL);
Brian Curtin09b86d12012-04-17 16:57:09 -05001434 Py_DECREF(msg);
Brett Cannon27fc5282012-04-15 14:15:31 -04001435 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02001436 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001437 goto error_with_unlock;
1438 }
1439 else if (mod != NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001440 PyObject *value;
1441 int initializing = 0;
1442
Brett Cannonfd074152012-04-14 14:10:13 -04001443 Py_INCREF(mod);
Antoine Pitrou03989852012-08-28 00:24:52 +02001444 /* Optimization: only call _bootstrap._lock_unlock_module() if
1445 __initializing__ is true.
1446 NOTE: because of this, __initializing__ must be set *before*
1447 stuffing the new module in sys.modules.
1448 */
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001449 value = _PyObject_GetAttrId(mod, &PyId___initializing__);
1450 if (value == NULL)
1451 PyErr_Clear();
1452 else {
1453 initializing = PyObject_IsTrue(value);
1454 Py_DECREF(value);
1455 if (initializing == -1)
1456 PyErr_Clear();
1457 }
1458 if (initializing > 0) {
1459 /* _bootstrap._lock_unlock_module() releases the import lock */
Alexandre Vassalotti865eaa12013-05-02 10:44:04 -07001460 value = _PyObject_CallMethodIdObjArgs(interp->importlib,
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001461 &PyId__lock_unlock_module, abs_name,
1462 NULL);
1463 if (value == NULL)
1464 goto error;
1465 Py_DECREF(value);
1466 }
1467 else {
1468#ifdef WITH_THREAD
1469 if (_PyImport_ReleaseLock() < 0) {
1470 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1471 goto error;
1472 }
1473#endif
1474 }
Brett Cannonfd074152012-04-14 14:10:13 -04001475 }
1476 else {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001477 /* _bootstrap._find_and_load() releases the import lock */
Alexandre Vassalotti865eaa12013-05-02 10:44:04 -07001478 mod = _PyObject_CallMethodIdObjArgs(interp->importlib,
Brett Cannonfd074152012-04-14 14:10:13 -04001479 &PyId__find_and_load, abs_name,
1480 builtins_import, NULL);
1481 if (mod == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001482 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001483 }
1484 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001485 /* From now on we don't hold the import lock anymore. */
Brett Cannonfd074152012-04-14 14:10:13 -04001486
1487 if (PyObject_Not(fromlist)) {
1488 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
1489 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05001490 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001491 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1492
1493 if (borrowed_dot == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001494 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001495 }
1496
Brian Curtine6b299f2012-04-14 14:19:33 -05001497 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001498 if (partition == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001499 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001500 }
1501
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001502 if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) {
1503 /* No dot in module name, simple exit */
1504 Py_DECREF(partition);
1505 final_mod = mod;
1506 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001507 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001508 }
1509
Brett Cannonfd074152012-04-14 14:10:13 -04001510 front = PyTuple_GET_ITEM(partition, 0);
1511 Py_INCREF(front);
1512 Py_DECREF(partition);
1513
1514 if (level == 0) {
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001515 final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL);
Antoine Pitroub78174c2012-05-06 17:15:23 +02001516 Py_DECREF(front);
Brett Cannonfd074152012-04-14 14:10:13 -04001517 }
1518 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001519 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
1520 PyUnicode_GET_LENGTH(front);
1521 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001522 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001523 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001524 Py_DECREF(front);
1525 if (to_return == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001526 goto error;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001527 }
Brett Cannonfd074152012-04-14 14:10:13 -04001528
1529 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001530 if (final_mod == NULL) {
1531 PyErr_Format(PyExc_KeyError,
1532 "%R not in sys.modules as expected",
1533 to_return);
1534 }
1535 else {
1536 Py_INCREF(final_mod);
1537 }
Antoine Pitroub78174c2012-05-06 17:15:23 +02001538 Py_DECREF(to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04001539 }
1540 }
1541 else {
1542 final_mod = mod;
1543 Py_INCREF(mod);
1544 }
1545 }
1546 else {
Alexandre Vassalotti865eaa12013-05-02 10:44:04 -07001547 final_mod = _PyObject_CallMethodIdObjArgs(interp->importlib,
Brett Cannonfd074152012-04-14 14:10:13 -04001548 &PyId__handle_fromlist, mod,
1549 fromlist, builtins_import,
1550 NULL);
1551 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001552 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001553
Brett Cannonfd074152012-04-14 14:10:13 -04001554 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05001555#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001556 if (_PyImport_ReleaseLock() < 0) {
1557 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1558 }
1559#endif
1560 error:
1561 Py_XDECREF(abs_name);
1562 Py_XDECREF(builtins_import);
1563 Py_XDECREF(mod);
1564 Py_XDECREF(package);
1565 Py_XDECREF(globals);
1566 Py_XDECREF(fromlist);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001567 if (final_mod == NULL)
1568 remove_importlib_frames();
Brett Cannonfd074152012-04-14 14:10:13 -04001569 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001570}
1571
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001572PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001573PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001574 PyObject *fromlist, int level)
1575{
1576 PyObject *nameobj, *mod;
1577 nameobj = PyUnicode_FromString(name);
1578 if (nameobj == NULL)
1579 return NULL;
1580 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1581 fromlist, level);
1582 Py_DECREF(nameobj);
1583 return mod;
1584}
1585
1586
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001587/* Re-import a module of any kind and return its module object, WITH
1588 INCREMENTED REFERENCE COUNT */
1589
Guido van Rossum79f25d91997-04-29 20:08:16 +00001590PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001591PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001592{
Brett Cannon62228db2012-04-29 14:38:11 -04001593 _Py_IDENTIFIER(reload);
1594 PyObject *reloaded_module = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon62228db2012-04-29 14:38:11 -04001596 PyObject *imp = PyDict_GetItemString(modules, "imp");
1597 if (imp == NULL) {
1598 imp = PyImport_ImportModule("imp");
1599 if (imp == NULL) {
1600 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 }
Brett Cannon62228db2012-04-29 14:38:11 -04001603 else {
1604 Py_INCREF(imp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001606
Brett Cannon62228db2012-04-29 14:38:11 -04001607 reloaded_module = _PyObject_CallMethodId(imp, &PyId_reload, "O", m);
1608 Py_DECREF(imp);
1609 return reloaded_module;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001610}
1611
1612
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001613/* Higher-level import emulator which emulates the "import" statement
1614 more accurately -- it invokes the __import__() function from the
1615 builtins of the current globals. This means that the import is
1616 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001617 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001618 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001619 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001620 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001621
1622PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001624{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 static PyObject *silly_list = NULL;
1626 static PyObject *builtins_str = NULL;
1627 static PyObject *import_str = NULL;
1628 PyObject *globals = NULL;
1629 PyObject *import = NULL;
1630 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001631 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001632 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 /* Initialize constant string objects */
1635 if (silly_list == NULL) {
1636 import_str = PyUnicode_InternFromString("__import__");
1637 if (import_str == NULL)
1638 return NULL;
1639 builtins_str = PyUnicode_InternFromString("__builtins__");
1640 if (builtins_str == NULL)
1641 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001642 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 if (silly_list == NULL)
1644 return NULL;
1645 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 /* Get the builtins from current globals */
1648 globals = PyEval_GetGlobals();
1649 if (globals != NULL) {
1650 Py_INCREF(globals);
1651 builtins = PyObject_GetItem(globals, builtins_str);
1652 if (builtins == NULL)
1653 goto err;
1654 }
1655 else {
1656 /* No globals -- use standard builtins, and fake globals */
1657 builtins = PyImport_ImportModuleLevel("builtins",
1658 NULL, NULL, NULL, 0);
1659 if (builtins == NULL)
1660 return NULL;
1661 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1662 if (globals == NULL)
1663 goto err;
1664 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 /* Get the __import__ function from the builtins */
1667 if (PyDict_Check(builtins)) {
1668 import = PyObject_GetItem(builtins, import_str);
1669 if (import == NULL)
1670 PyErr_SetObject(PyExc_KeyError, import_str);
1671 }
1672 else
1673 import = PyObject_GetAttr(builtins, import_str);
1674 if (import == NULL)
1675 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001678 Always use absolute import here.
1679 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1681 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001682 if (r == NULL)
1683 goto err;
1684 Py_DECREF(r);
1685
1686 modules = PyImport_GetModuleDict();
1687 r = PyDict_GetItem(modules, module_name);
1688 if (r != NULL)
1689 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001690
1691 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 Py_XDECREF(globals);
1693 Py_XDECREF(builtins);
1694 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001697}
1698
Barry Warsaw28a691b2010-04-17 00:19:56 +00001699static PyObject *
Brett Cannon2657df42012-05-04 15:20:40 -04001700imp_extension_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001701{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 PyObject *list;
Brett Cannon2657df42012-05-04 15:20:40 -04001703 const char *suffix;
1704 unsigned int index = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 list = PyList_New(0);
1707 if (list == NULL)
1708 return NULL;
Brett Cannon2657df42012-05-04 15:20:40 -04001709#ifdef HAVE_DYNAMIC_LOADING
1710 while ((suffix = _PyImport_DynLoadFiletab[index])) {
1711 PyObject *item = PyUnicode_FromString(suffix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001712 if (item == NULL) {
1713 Py_DECREF(list);
1714 return NULL;
1715 }
1716 if (PyList_Append(list, item) < 0) {
1717 Py_DECREF(list);
1718 Py_DECREF(item);
1719 return NULL;
1720 }
1721 Py_DECREF(item);
Brett Cannon2657df42012-05-04 15:20:40 -04001722 index += 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001723 }
Brett Cannon2657df42012-05-04 15:20:40 -04001724#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001725 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001726}
1727
Guido van Rossum79f25d91997-04-29 20:08:16 +00001728static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001729imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001730{
Victor Stinner95872862011-03-07 18:20:56 +01001731 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001732 int ret;
1733 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01001734 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 return NULL;
1736 ret = init_builtin(name);
1737 if (ret < 0)
1738 return NULL;
1739 if (ret == 0) {
1740 Py_INCREF(Py_None);
1741 return Py_None;
1742 }
Victor Stinner95872862011-03-07 18:20:56 +01001743 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001744 Py_XINCREF(m);
1745 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001746}
1747
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001749imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750{
Victor Stinner53dc7352011-03-20 01:50:21 +01001751 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001752 int ret;
1753 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01001754 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001756 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 if (ret < 0)
1758 return NULL;
1759 if (ret == 0) {
1760 Py_INCREF(Py_None);
1761 return Py_None;
1762 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001763 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 Py_XINCREF(m);
1765 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001766}
1767
Guido van Rossum79f25d91997-04-29 20:08:16 +00001768static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001769imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001770{
Victor Stinner53dc7352011-03-20 01:50:21 +01001771 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001772
Victor Stinner53dc7352011-03-20 01:50:21 +01001773 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 return NULL;
1775 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001776}
1777
Guido van Rossum79f25d91997-04-29 20:08:16 +00001778static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00001779imp_is_frozen_package(PyObject *self, PyObject *args)
1780{
Victor Stinner53dc7352011-03-20 01:50:21 +01001781 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00001782
Victor Stinner53dc7352011-03-20 01:50:21 +01001783 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 return NULL;
1785 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00001786}
1787
1788static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001789imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001790{
Victor Stinner95872862011-03-07 18:20:56 +01001791 PyObject *name;
1792 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 return NULL;
1794 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795}
1796
Guido van Rossum79f25d91997-04-29 20:08:16 +00001797static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001798imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799{
Victor Stinner53dc7352011-03-20 01:50:21 +01001800 PyObject *name;
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001801 const struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001802 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 return NULL;
1804 p = find_frozen(name);
1805 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001806}
1807
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001808#ifdef HAVE_DYNAMIC_LOADING
1809
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001811imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001812{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001813 PyObject *name, *pathname, *fob = NULL, *mod;
1814 FILE *fp;
1815
1816 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
1817 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001819 if (fob != NULL) {
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001820 fp = _Py_fopen(pathname, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001821 if (fp == NULL) {
1822 Py_DECREF(pathname);
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001823 if (!PyErr_Occurred())
1824 PyErr_SetFromErrno(PyExc_IOError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001825 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001826 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001827 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001828 else
1829 fp = NULL;
1830 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001831 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 if (fp)
1833 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001834 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001835}
1836
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001837#endif /* HAVE_DYNAMIC_LOADING */
1838
Barry Warsaw28a691b2010-04-17 00:19:56 +00001839
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001840/* Doc strings */
1841
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001842PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04001843"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001844
Brett Cannon2657df42012-05-04 15:20:40 -04001845PyDoc_STRVAR(doc_extension_suffixes,
1846"extension_suffixes() -> list of strings\n\
1847Returns the list of file suffixes used to identify extension modules.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001848
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001849PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00001850"lock_held() -> boolean\n\
1851Return True if the import lock is currently held, else False.\n\
1852On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00001853
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001854PyDoc_STRVAR(doc_acquire_lock,
1855"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00001856Acquires the interpreter's import lock for the current thread.\n\
1857This lock should be used by import hooks to ensure thread-safety\n\
1858when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001859On platforms without threads, this function does nothing.");
1860
1861PyDoc_STRVAR(doc_release_lock,
1862"release_lock() -> None\n\
1863Release the interpreter's import lock.\n\
1864On platforms without threads, this function does nothing.");
1865
Guido van Rossum79f25d91997-04-29 20:08:16 +00001866static PyMethodDef imp_methods[] = {
Brett Cannon2657df42012-05-04 15:20:40 -04001867 {"extension_suffixes", imp_extension_suffixes, METH_NOARGS,
1868 doc_extension_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
1870 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
1871 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001872 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
1873 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
1874 {"init_builtin", imp_init_builtin, METH_VARARGS},
1875 {"init_frozen", imp_init_frozen, METH_VARARGS},
1876 {"is_builtin", imp_is_builtin, METH_VARARGS},
1877 {"is_frozen", imp_is_frozen, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001878#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001880#endif
Brett Cannon442c9b92011-03-23 16:14:42 -07001881 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001883};
1884
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001885
Martin v. Löwis1a214512008-06-11 05:26:20 +00001886static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001887 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04001888 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 doc_imp,
1890 0,
1891 imp_methods,
1892 NULL,
1893 NULL,
1894 NULL,
1895 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001896};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001897
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001898PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001899PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001900{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 m = PyModule_Create(&impmodule);
1904 if (m == NULL)
1905 goto failure;
1906 d = PyModule_GetDict(m);
1907 if (d == NULL)
1908 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001910 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001911 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 Py_XDECREF(m);
1913 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001914}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001915
1916
Guido van Rossumb18618d2000-05-03 23:44:39 +00001917/* API for embedding applications that want to add their own entries
1918 to the table of built-in modules. This should normally be called
1919 *before* Py_Initialize(). When the table resize fails, -1 is
1920 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001921
1922 After a similar function by Just van Rossum. */
1923
1924int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001925PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001926{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 static struct _inittab *our_copy = NULL;
1928 struct _inittab *p;
1929 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 /* Count the number of entries in both tables */
1932 for (n = 0; newtab[n].name != NULL; n++)
1933 ;
1934 if (n == 0)
1935 return 0; /* Nothing to do */
1936 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
1937 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 /* Allocate new memory for the combined table */
1940 p = our_copy;
1941 PyMem_RESIZE(p, struct _inittab, i+n+1);
1942 if (p == NULL)
1943 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 /* Copy the tables into the new memory */
1946 if (our_copy != PyImport_Inittab)
1947 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
1948 PyImport_Inittab = our_copy = p;
1949 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001952}
1953
1954/* Shorthand to add a single entry given a name and a function */
1955
1956int
Brett Cannona826f322009-04-02 03:41:46 +00001957PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001958{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001960
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001963 newtab[0].name = (char *)name;
1964 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001966 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001967}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001968
1969#ifdef __cplusplus
1970}
1971#endif