blob: 8773be46adea0f10de15accf1dd289d5f2147b82 [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
Christian Heimesd3eb5a152008-02-24 00:38:49 +000022#ifdef MS_WINDOWS
23/* for stat.st_mode */
24typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000025/* for _mkdir */
26#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000027#endif
28
Guido van Rossum21d335e1993-10-15 13:01:11 +000029
Barry Warsaw28a691b2010-04-17 00:19:56 +000030#define CACHEDIR "__pycache__"
Guido van Rossum96774c12000-05-01 20:19:08 +000031
Victor Stinner95872862011-03-07 18:20:56 +010032/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +000033static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000034
Victor Stinnerfe7c5b52011-04-05 01:48:03 +020035/* Function from Parser/tokenizer.c */
36extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
37
Guido van Rossum771c6c81997-10-31 18:37:24 +000038/* This table is defined in config.c: */
39extern struct _inittab _PyImport_Inittab[];
40
41struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000042
Victor Stinnerd0296212011-03-14 14:04:10 -040043static PyObject *initstr = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +000044
Guido van Rossum1ae940a1995-01-02 19:04:15 +000045/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046
47void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000048_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000049{
Victor Stinnerd0296212011-03-14 14:04:10 -040050 initstr = PyUnicode_InternFromString("__init__");
51 if (initstr == NULL)
52 Py_FatalError("Can't initialize import variables");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000053}
54
Guido van Rossum25ce5661997-08-02 03:10:38 +000055void
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) {
Just van Rossum52e14d62002-12-30 22:08:05 +000081 error:
Brett Cannonfd074152012-04-14 14:10:13 -040082 PyErr_Print();
83 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
Nadeem Vawda8f46d652012-05-05 12:27:30 +020084 "or path_importer_cache failed");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000085 }
Brett Cannonfd074152012-04-14 14:10:13 -040086 Py_DECREF(path_hooks);
87}
88
89void
90_PyImportZip_Init(void)
91{
92 PyObject *path_hooks, *zimpimport;
93 int err = 0;
94
95 path_hooks = PySys_GetObject("path_hooks");
96 if (path_hooks == NULL)
97 goto error;
98
99 if (Py_VerboseFlag)
100 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000102 zimpimport = PyImport_ImportModule("zipimport");
103 if (zimpimport == NULL) {
104 PyErr_Clear(); /* No zip import module -- okay */
105 if (Py_VerboseFlag)
106 PySys_WriteStderr("# can't import zipimport\n");
107 }
108 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200109 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200110 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
111 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000112 Py_DECREF(zimpimport);
113 if (zipimporter == NULL) {
114 PyErr_Clear(); /* No zipimporter object -- okay */
115 if (Py_VerboseFlag)
116 PySys_WriteStderr(
117 "# can't import zipimport.zipimporter\n");
118 }
119 else {
Brett Cannon8923a4d2012-04-24 22:03:46 -0400120 /* sys.path_hooks.insert(0, zipimporter) */
121 err = PyList_Insert(path_hooks, 0, zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000122 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400123 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000124 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400125 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000126 if (Py_VerboseFlag)
127 PySys_WriteStderr(
128 "# installed zipimport hook\n");
129 }
130 }
Brett Cannonfd074152012-04-14 14:10:13 -0400131
132 return;
133
134 error:
135 PyErr_Print();
Brett Cannonacf85cd2012-04-29 12:50:03 -0400136 Py_FatalError("initializing zipimport failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000137}
138
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000139/* Locking primitives to prevent parallel imports of the same module
140 in different threads to return with a partially loaded module.
141 These calls are serialized by the global interpreter lock. */
142
143#ifdef WITH_THREAD
144
Guido van Rossum49b56061998-10-01 20:42:43 +0000145#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000146
Guido van Rossum65d5b571998-12-21 19:32:43 +0000147static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000148static long import_lock_thread = -1;
149static int import_lock_level = 0;
150
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000151void
152_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 long me = PyThread_get_thread_ident();
155 if (me == -1)
156 return; /* Too bad */
157 if (import_lock == NULL) {
158 import_lock = PyThread_allocate_lock();
159 if (import_lock == NULL)
160 return; /* Nothing much we can do. */
161 }
162 if (import_lock_thread == me) {
163 import_lock_level++;
164 return;
165 }
166 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
167 {
168 PyThreadState *tstate = PyEval_SaveThread();
169 PyThread_acquire_lock(import_lock, 1);
170 PyEval_RestoreThread(tstate);
171 }
Antoine Pitrou202b6062012-12-18 22:18:17 +0100172 assert(import_lock_level == 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000173 import_lock_thread = me;
174 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000175}
176
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000177int
178_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 long me = PyThread_get_thread_ident();
181 if (me == -1 || import_lock == NULL)
182 return 0; /* Too bad */
183 if (import_lock_thread != me)
184 return -1;
185 import_lock_level--;
Antoine Pitrou202b6062012-12-18 22:18:17 +0100186 assert(import_lock_level >= 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 if (import_lock_level == 0) {
188 import_lock_thread = -1;
189 PyThread_release_lock(import_lock);
190 }
191 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000192}
193
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000194/* This function is called from PyOS_AfterFork to ensure that newly
195 created child processes do not share locks with the parent.
196 We now acquire the import lock around fork() calls but on some platforms
197 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000198
199void
200_PyImport_ReInitLock(void)
201{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 if (import_lock != NULL)
203 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000204 if (import_lock_level > 1) {
205 /* Forked as a side effect of import */
206 long me = PyThread_get_thread_ident();
Brett Cannone4710cf2012-11-15 21:39:36 -0500207 /* The following could fail if the lock is already held, but forking as
208 a side-effect of an import is a) rare, b) nuts, and c) difficult to
209 do thanks to the lock only being held when doing individual module
210 locks per import. */
211 PyThread_acquire_lock(import_lock, NOWAIT_LOCK);
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000212 import_lock_thread = me;
213 import_lock_level--;
214 } else {
215 import_lock_thread = -1;
216 import_lock_level = 0;
217 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000218}
219
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000220#endif
221
Tim Peters69232342001-08-30 05:16:13 +0000222static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000223imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000224{
Tim Peters69232342001-08-30 05:16:13 +0000225#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000226 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000227#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000228 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000229#endif
230}
231
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000232static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000233imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000234{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000235#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000236 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000237#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000238 Py_INCREF(Py_None);
239 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000240}
241
242static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000243imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000244{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000245#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000246 if (_PyImport_ReleaseLock() < 0) {
247 PyErr_SetString(PyExc_RuntimeError,
248 "not holding the import lock");
249 return NULL;
250 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000251#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 Py_INCREF(Py_None);
253 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000254}
255
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100256void
257_PyImport_Fini(void)
258{
259 Py_XDECREF(extensions);
260 extensions = NULL;
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100261#ifdef WITH_THREAD
262 if (import_lock != NULL) {
263 PyThread_free_lock(import_lock);
264 import_lock = NULL;
265 }
266#endif
267}
268
Guido van Rossum25ce5661997-08-02 03:10:38 +0000269/* Helper for sys */
270
271PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000272PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 PyInterpreterState *interp = PyThreadState_GET()->interp;
275 if (interp->modules == NULL)
276 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
277 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000278}
279
Guido van Rossum3f5da241990-12-20 15:06:42 +0000280
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000281/* List of names to clear in sys */
282static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 "path", "argv", "ps1", "ps2",
284 "last_type", "last_value", "last_traceback",
285 "path_hooks", "path_importer_cache", "meta_path",
286 /* misc stuff */
287 "flags", "float_info",
288 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000289};
290
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000291static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000292 "stdin", "__stdin__",
293 "stdout", "__stdout__",
294 "stderr", "__stderr__",
295 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000296};
297
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000298
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000299/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000300
Guido van Rossum3f5da241990-12-20 15:06:42 +0000301void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000302PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000303{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000304 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000305 PyObject *key, *value, *dict;
306 PyInterpreterState *interp = PyThreadState_GET()->interp;
307 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000309 if (modules == NULL)
310 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 /* Delete some special variables first. These are common
313 places where user values hide and people complain when their
314 destructors fail. Since the modules containing them are
315 deleted *last* of all, they would come too late in the normal
316 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000318 value = PyDict_GetItemString(modules, "builtins");
319 if (value != NULL && PyModule_Check(value)) {
320 dict = PyModule_GetDict(value);
321 if (Py_VerboseFlag)
322 PySys_WriteStderr("# clear builtins._\n");
323 PyDict_SetItemString(dict, "_", Py_None);
324 }
325 value = PyDict_GetItemString(modules, "sys");
326 if (value != NULL && PyModule_Check(value)) {
327 char **p;
328 PyObject *v;
329 dict = PyModule_GetDict(value);
330 for (p = sys_deletes; *p != NULL; p++) {
331 if (Py_VerboseFlag)
332 PySys_WriteStderr("# clear sys.%s\n", *p);
333 PyDict_SetItemString(dict, *p, Py_None);
334 }
335 for (p = sys_files; *p != NULL; p+=2) {
336 if (Py_VerboseFlag)
337 PySys_WriteStderr("# restore sys.%s\n", *p);
338 v = PyDict_GetItemString(dict, *(p+1));
339 if (v == NULL)
340 v = Py_None;
341 PyDict_SetItemString(dict, *p, v);
342 }
343 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 /* First, delete __main__ */
346 value = PyDict_GetItemString(modules, "__main__");
347 if (value != NULL && PyModule_Check(value)) {
348 if (Py_VerboseFlag)
349 PySys_WriteStderr("# cleanup __main__\n");
350 _PyModule_Clear(value);
351 PyDict_SetItemString(modules, "__main__", Py_None);
352 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 /* The special treatment of "builtins" here is because even
355 when it's not referenced as a module, its dictionary is
356 referenced by almost every module's __builtins__. Since
357 deleting a module clears its dictionary (even if there are
358 references left to it), we need to delete the "builtins"
359 module last. Likewise, we don't delete sys until the very
360 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000361
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000362 Also note that we 'delete' modules by replacing their entry
363 in the modules dict with None, rather than really deleting
364 them; this avoids a rehash of the modules dictionary and
365 also marks them as "non existent" so they won't be
366 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 /* Next, repeatedly delete modules with a reference count of
369 one (skipping builtins and sys) and delete them */
370 do {
371 ndone = 0;
372 pos = 0;
373 while (PyDict_Next(modules, &pos, &key, &value)) {
374 if (value->ob_refcnt != 1)
375 continue;
376 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100377 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100379 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 continue;
381 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100382 PySys_FormatStderr(
383 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 _PyModule_Clear(value);
385 PyDict_SetItem(modules, key, Py_None);
386 ndone++;
387 }
388 }
389 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000390
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000391 /* Next, delete all modules (still skipping builtins and sys) */
392 pos = 0;
393 while (PyDict_Next(modules, &pos, &key, &value)) {
394 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100395 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100397 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 continue;
399 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100400 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 _PyModule_Clear(value);
402 PyDict_SetItem(modules, key, Py_None);
403 }
404 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000405
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 /* Next, delete sys and builtins (in that order) */
407 value = PyDict_GetItemString(modules, "sys");
408 if (value != NULL && PyModule_Check(value)) {
409 if (Py_VerboseFlag)
410 PySys_WriteStderr("# cleanup sys\n");
411 _PyModule_Clear(value);
412 PyDict_SetItemString(modules, "sys", Py_None);
413 }
414 value = PyDict_GetItemString(modules, "builtins");
415 if (value != NULL && PyModule_Check(value)) {
416 if (Py_VerboseFlag)
417 PySys_WriteStderr("# cleanup builtins\n");
418 _PyModule_Clear(value);
419 PyDict_SetItemString(modules, "builtins", Py_None);
420 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 /* Finally, clear and delete the modules directory */
423 PyDict_Clear(modules);
424 interp->modules = NULL;
425 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000426}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000427
428
Barry Warsaw28a691b2010-04-17 00:19:56 +0000429/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000430
431long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000432PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000433{
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200434 long res;
Brett Cannon77b2abd2012-07-09 16:09:00 -0400435 PyInterpreterState *interp = PyThreadState_Get()->interp;
436 PyObject *pyc_magic = PyObject_GetAttrString(interp->importlib,
437 "_RAW_MAGIC_NUMBER");
438 if (pyc_magic == NULL)
439 return -1;
Antoine Pitrou44b4b6a2012-07-10 18:27:54 +0200440 res = PyLong_AsLong(pyc_magic);
Benjamin Peterson66f36592012-07-09 22:21:55 -0700441 Py_DECREF(pyc_magic);
442 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000443}
444
445
Brett Cannon3adc7b72012-07-09 14:22:12 -0400446extern const char * _PySys_ImplCacheTag;
447
Barry Warsaw28a691b2010-04-17 00:19:56 +0000448const char *
449PyImport_GetMagicTag(void)
450{
Brett Cannon3adc7b72012-07-09 14:22:12 -0400451 return _PySys_ImplCacheTag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000452}
453
Brett Cannon98979b82012-07-02 15:13:11 -0400454
Guido van Rossum25ce5661997-08-02 03:10:38 +0000455/* Magic for extension modules (built-in as well as dynamically
456 loaded). To prevent initializing an extension module more than
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200457 once, we keep a static dictionary 'extensions' keyed by the tuple
458 (module name, module name) (for built-in modules) or by
459 (filename, module name) (for dynamically loaded modules), containing these
460 modules. A copy of the module's dictionary is stored by calling
461 _PyImport_FixupExtensionObject() immediately after the module initialization
462 function succeeds. A copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100463 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000465 Modules which do support multiple initialization set their m_size
466 field to a non-negative number (indicating the size of the
467 module-specific state). They are still recorded in the extensions
468 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000469*/
470
471int
Victor Stinner95872862011-03-07 18:20:56 +0100472_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
473 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474{
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500475 PyObject *modules, *dict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000476 struct PyModuleDef *def;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500477 int res;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 if (extensions == NULL) {
479 extensions = PyDict_New();
480 if (extensions == NULL)
481 return -1;
482 }
483 if (mod == NULL || !PyModule_Check(mod)) {
484 PyErr_BadInternalCall();
485 return -1;
486 }
487 def = PyModule_GetDef(mod);
488 if (!def) {
489 PyErr_BadInternalCall();
490 return -1;
491 }
492 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100493 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 return -1;
495 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100496 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 return -1;
498 }
499 if (def->m_size == -1) {
500 if (def->m_base.m_copy) {
501 /* Somebody already imported the module,
502 likely under a different name.
503 XXX this should really not happen. */
504 Py_DECREF(def->m_base.m_copy);
505 def->m_base.m_copy = NULL;
506 }
507 dict = PyModule_GetDict(mod);
508 if (dict == NULL)
509 return -1;
510 def->m_base.m_copy = PyDict_Copy(dict);
511 if (def->m_base.m_copy == NULL)
512 return -1;
513 }
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500514 key = PyTuple_Pack(2, filename, name);
515 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200516 return -1;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500517 res = PyDict_SetItem(extensions, key, (PyObject *)def);
518 Py_DECREF(key);
519 if (res < 0)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200520 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000521 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000522}
523
Victor Stinner49d3f252010-10-17 01:24:53 +0000524int
525_PyImport_FixupBuiltin(PyObject *mod, char *name)
526{
527 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100528 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100529 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100530 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000531 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100532 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
533 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000534 return res;
535}
536
Guido van Rossum25ce5661997-08-02 03:10:38 +0000537PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100538_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539{
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500540 PyObject *mod, *mdict, *key;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 PyModuleDef* def;
542 if (extensions == NULL)
543 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500544 key = PyTuple_Pack(2, filename, name);
545 if (key == NULL)
Andrew Svetlov6b2cbeb2012-12-14 17:04:59 +0200546 return NULL;
Benjamin Peterson5cb8a312012-12-15 00:05:16 -0500547 def = (PyModuleDef *)PyDict_GetItem(extensions, key);
548 Py_DECREF(key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 if (def == NULL)
550 return NULL;
551 if (def->m_size == -1) {
552 /* Module does not support repeated initialization */
553 if (def->m_base.m_copy == NULL)
554 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100555 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 if (mod == NULL)
557 return NULL;
558 mdict = PyModule_GetDict(mod);
559 if (mdict == NULL)
560 return NULL;
561 if (PyDict_Update(mdict, def->m_base.m_copy))
562 return NULL;
563 }
564 else {
565 if (def->m_base.m_init == NULL)
566 return NULL;
567 mod = def->m_base.m_init();
568 if (mod == NULL)
569 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100570 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 Py_DECREF(mod);
572 }
573 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100574 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 Py_DECREF(mod);
576 return NULL;
577 }
578 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100579 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 name, filename);
581 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000582
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000583}
584
Victor Stinner49d3f252010-10-17 01:24:53 +0000585PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000586_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000587{
Victor Stinner95872862011-03-07 18:20:56 +0100588 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100589 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100590 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000591 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100592 res = _PyImport_FindExtensionObject(nameobj, nameobj);
593 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000594 return res;
595}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000596
597/* Get the module object corresponding to a module name.
598 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000599 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000600 Because the former action is most common, THIS DOES NOT RETURN A
601 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000604PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000605{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 PyObject *modules = PyImport_GetModuleDict();
607 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000608
Victor Stinner27ee0892011-03-04 12:57:09 +0000609 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 PyModule_Check(m))
611 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000612 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 if (m == NULL)
614 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000615 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000616 Py_DECREF(m);
617 return NULL;
618 }
619 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622}
623
Victor Stinner27ee0892011-03-04 12:57:09 +0000624PyObject *
625PyImport_AddModule(const char *name)
626{
627 PyObject *nameobj, *module;
628 nameobj = PyUnicode_FromString(name);
629 if (nameobj == NULL)
630 return NULL;
631 module = PyImport_AddModuleObject(nameobj);
632 Py_DECREF(nameobj);
633 return module;
634}
635
636
Tim Peters1cd70172004-08-02 03:52:12 +0000637/* Remove name from sys.modules, if it's there. */
638static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000639remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000640{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000641 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000642 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000644 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 Py_FatalError("import: deleting existing key in"
646 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000647}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648
Christian Heimes3b06e532008-01-07 20:12:44 +0000649
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000650/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000651 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
652 * removed from sys.modules, to avoid leaving damaged module objects
653 * in sys.modules. The caller may wish to restore the original
654 * module object (if any) in this case; PyImport_ReloadModule is an
655 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000656 *
657 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
658 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000659 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000661PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 return PyImport_ExecCodeModuleWithPathnames(
664 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000665}
666
667PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000668PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000669{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 return PyImport_ExecCodeModuleWithPathnames(
671 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000672}
673
674PyObject *
675PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000676 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000677{
Victor Stinner27ee0892011-03-04 12:57:09 +0000678 PyObject *m = NULL;
679 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
680
681 nameobj = PyUnicode_FromString(name);
682 if (nameobj == NULL)
683 return NULL;
684
Victor Stinner27ee0892011-03-04 12:57:09 +0000685 if (cpathname != NULL) {
686 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
687 if (cpathobj == NULL)
688 goto error;
Brett Cannona6473f92012-07-13 13:57:03 -0400689 }
690 else
Victor Stinner27ee0892011-03-04 12:57:09 +0000691 cpathobj = NULL;
Brett Cannona6473f92012-07-13 13:57:03 -0400692
693 if (pathname != NULL) {
694 pathobj = PyUnicode_DecodeFSDefault(pathname);
695 if (pathobj == NULL)
696 goto error;
697 }
698 else if (cpathobj != NULL) {
699 PyInterpreterState *interp = PyThreadState_GET()->interp;
700 _Py_IDENTIFIER(_get_sourcefile);
701
702 if (interp == NULL) {
703 Py_FatalError("PyImport_ExecCodeModuleWithPathnames: "
704 "no interpreter!");
705 }
706
707 pathobj = _PyObject_CallMethodObjIdArgs(interp->importlib,
708 &PyId__get_sourcefile, cpathobj,
709 NULL);
710 if (pathobj == NULL)
711 PyErr_Clear();
712 }
713 else
714 pathobj = NULL;
715
Victor Stinner27ee0892011-03-04 12:57:09 +0000716 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
717error:
718 Py_DECREF(nameobj);
719 Py_XDECREF(pathobj);
720 Py_XDECREF(cpathobj);
721 return m;
722}
723
724PyObject*
725PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
726 PyObject *cpathname)
727{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 PyObject *modules = PyImport_GetModuleDict();
729 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730
Victor Stinner27ee0892011-03-04 12:57:09 +0000731 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 if (m == NULL)
733 return NULL;
734 /* If the module is being reloaded, we get the old module back
735 and re-use its dict to exec the new code. */
736 d = PyModule_GetDict(m);
737 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
738 if (PyDict_SetItemString(d, "__builtins__",
739 PyEval_GetBuiltins()) != 0)
740 goto error;
741 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 if (pathname != NULL) {
Brett Cannona6473f92012-07-13 13:57:03 -0400743 v = pathname;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 }
Brett Cannona6473f92012-07-13 13:57:03 -0400745 else {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 v = ((PyCodeObject *)co)->co_filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 }
Brett Cannona6473f92012-07-13 13:57:03 -0400748 Py_INCREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 if (PyDict_SetItemString(d, "__file__", v) != 0)
750 PyErr_Clear(); /* Not important enough to report */
751 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000754 if (cpathname != NULL)
755 v = cpathname;
756 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 if (PyDict_SetItemString(d, "__cached__", v) != 0)
759 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000760
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000761 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 if (v == NULL)
763 goto error;
764 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000765
Victor Stinner27ee0892011-03-04 12:57:09 +0000766 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000768 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000769 name);
770 return NULL;
771 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000776
777 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 remove_module(name);
779 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000780}
781
782
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000783static void
784update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 PyObject *constants, *tmp;
787 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 if (PyUnicode_Compare(co->co_filename, oldname))
790 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 tmp = co->co_filename;
793 co->co_filename = newname;
794 Py_INCREF(co->co_filename);
795 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000796
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 constants = co->co_consts;
798 n = PyTuple_GET_SIZE(constants);
799 for (i = 0; i < n; i++) {
800 tmp = PyTuple_GET_ITEM(constants, i);
801 if (PyCode_Check(tmp))
802 update_code_filenames((PyCodeObject *)tmp,
803 oldname, newname);
804 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000805}
806
Victor Stinner2f42ae52011-03-20 00:41:24 +0100807static void
808update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000809{
Victor Stinner2f42ae52011-03-20 00:41:24 +0100810 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000811
Victor Stinner2f42ae52011-03-20 00:41:24 +0100812 if (PyUnicode_Compare(co->co_filename, newname) == 0)
813 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 oldname = co->co_filename;
816 Py_INCREF(oldname);
817 update_code_filenames(co, oldname, newname);
818 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000819}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000820
Brett Cannon442c9b92011-03-23 16:14:42 -0700821static PyObject *
822imp_fix_co_filename(PyObject *self, PyObject *args)
823{
824 PyObject *co;
825 PyObject *file_path;
826
827 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
828 return NULL;
829
830 if (!PyCode_Check(co)) {
831 PyErr_SetString(PyExc_TypeError,
832 "first argument must be a code object");
833 return NULL;
834 }
835
836 if (!PyUnicode_Check(file_path)) {
837 PyErr_SetString(PyExc_TypeError,
838 "second argument must be a string");
839 return NULL;
840 }
841
842 update_compiled_module((PyCodeObject*)co, file_path);
843
844 Py_RETURN_NONE;
845}
846
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000848/* Forward */
Benjamin Peterson6fba3db2013-03-18 23:13:31 -0700849static const struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000850
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000851
852/* Helper to test for built-in module */
853
854static int
Victor Stinner95872862011-03-07 18:20:56 +0100855is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000856{
Victor Stinner95872862011-03-07 18:20:56 +0100857 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +0100859 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
860 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (PyImport_Inittab[i].initfunc == NULL)
862 return -1;
863 else
864 return 1;
865 }
866 }
867 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000868}
869
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000870
Just van Rossum52e14d62002-12-30 22:08:05 +0000871/* Return an importer object for a sys.path/pkg.__path__ item 'p',
872 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +0000873 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +0000874 that can handle the path item. Return None if no hook could;
875 this tells our caller it should fall back to the builtin
876 import mechanism. Cache the result in path_importer_cache.
877 Returns a borrowed reference. */
878
879static PyObject *
880get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +0000882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 PyObject *importer;
884 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +0000885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 /* These conditions are the caller's responsibility: */
887 assert(PyList_Check(path_hooks));
888 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +0000889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 nhooks = PyList_Size(path_hooks);
891 if (nhooks < 0)
892 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +0000893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894 importer = PyDict_GetItem(path_importer_cache, p);
895 if (importer != NULL)
896 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 /* set path_importer_cache[p] to None to avoid recursion */
899 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
900 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +0000901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 for (j = 0; j < nhooks; j++) {
903 PyObject *hook = PyList_GetItem(path_hooks, j);
904 if (hook == NULL)
905 return NULL;
906 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
907 if (importer != NULL)
908 break;
Just van Rossum52e14d62002-12-30 22:08:05 +0000909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
911 return NULL;
912 }
913 PyErr_Clear();
914 }
915 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -0400916 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 }
918 if (importer != NULL) {
919 int err = PyDict_SetItem(path_importer_cache, p, importer);
920 Py_DECREF(importer);
921 if (err != 0)
922 return NULL;
923 }
924 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +0000925}
926
Christian Heimes9cd17752007-11-18 19:35:23 +0000927PyAPI_FUNC(PyObject *)
928PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +0000930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000931 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
932 if ((path_hooks = PySys_GetObject("path_hooks"))) {
933 importer = get_path_importer(path_importer_cache,
934 path_hooks, path);
935 }
936 }
937 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
938 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +0000939}
940
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000941
Victor Stinner95872862011-03-07 18:20:56 +0100942static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000943
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +0000945 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000946 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000947
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000948static int
Victor Stinner95872862011-03-07 18:20:56 +0100949init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000952
Victor Stinner95872862011-03-07 18:20:56 +0100953 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000955
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 for (p = PyImport_Inittab; p->name != NULL; p++) {
957 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +0100958 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +0100959 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 if (p->initfunc == NULL) {
961 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +0100962 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 name);
964 return -1;
965 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 mod = (*p->initfunc)();
967 if (mod == 0)
968 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +0100969 /* Remember pointer to module init function. */
970 def = PyModule_GetDef(mod);
971 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +0100972 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 return -1;
974 /* FixupExtension has put the module into sys.modules,
975 so we can release our own reference. */
976 Py_DECREF(mod);
977 return 1;
978 }
979 }
980 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000981}
Guido van Rossumf56e3db1993-04-01 20:59:32 +0000982
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000983
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000984/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000985
Benjamin Peterson6fba3db2013-03-18 23:13:31 -0700986static const struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +0100987find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000988{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -0700989 const struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000990
Victor Stinner53dc7352011-03-20 01:50:21 +0100991 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 for (p = PyImport_FrozenModules; ; p++) {
995 if (p->name == NULL)
996 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +0100997 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 break;
999 }
1000 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001001}
1002
Guido van Rossum79f25d91997-04-29 20:08:16 +00001003static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001004get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001005{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001006 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 if (p == NULL) {
1010 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001011 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 name);
1013 return NULL;
1014 }
1015 if (p->code == NULL) {
1016 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001017 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 name);
1019 return NULL;
1020 }
1021 size = p->size;
1022 if (size < 0)
1023 size = -size;
1024 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001025}
1026
Brett Cannon8d110132009-03-15 02:20:16 +00001027static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001028is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001029{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001030 const struct _frozen *p = find_frozen(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001032
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 if (p == NULL) {
1034 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001035 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 name);
1037 return NULL;
1038 }
Brett Cannon8d110132009-03-15 02:20:16 +00001039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 if (size < 0)
1043 Py_RETURN_TRUE;
1044 else
1045 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001046}
1047
1048
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001049/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001050 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001051 an exception set if the initialization failed.
1052 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001053
1054int
Victor Stinner53dc7352011-03-20 01:50:21 +01001055PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001056{
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001057 const struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001058 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 int ispackage;
1060 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001061
Victor Stinner53dc7352011-03-20 01:50:21 +01001062 p = find_frozen(name);
1063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 if (p == NULL)
1065 return 0;
1066 if (p->code == NULL) {
1067 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001068 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 name);
1070 return -1;
1071 }
1072 size = p->size;
1073 ispackage = (size < 0);
1074 if (ispackage)
1075 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1077 if (co == NULL)
1078 return -1;
1079 if (!PyCode_Check(co)) {
1080 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001081 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 name);
1083 goto err_return;
1084 }
1085 if (ispackage) {
1086 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01001087 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001088 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001089 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 if (m == NULL)
1091 goto err_return;
1092 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 l = PyList_New(1);
1094 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 goto err_return;
1096 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001097 Py_INCREF(name);
1098 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 err = PyDict_SetItemString(d, "__path__", l);
1100 Py_DECREF(l);
1101 if (err != 0)
1102 goto err_return;
1103 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001104 path = PyUnicode_FromString("<frozen>");
1105 if (path == NULL)
1106 goto err_return;
1107 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
1108 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 if (m == NULL)
1110 goto err_return;
1111 Py_DECREF(co);
1112 Py_DECREF(m);
1113 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001114err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 Py_DECREF(co);
1116 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001117}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001118
Victor Stinner53dc7352011-03-20 01:50:21 +01001119int
1120PyImport_ImportFrozenModule(char *name)
1121{
1122 PyObject *nameobj;
1123 int ret;
1124 nameobj = PyUnicode_InternFromString(name);
1125 if (nameobj == NULL)
1126 return -1;
1127 ret = PyImport_ImportFrozenModuleObject(nameobj);
1128 Py_DECREF(nameobj);
1129 return ret;
1130}
1131
Guido van Rossum74e6a111994-08-29 12:54:38 +00001132
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001133/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001134 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001135
Guido van Rossum79f25d91997-04-29 20:08:16 +00001136PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001137PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 PyObject *pname;
1140 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 pname = PyUnicode_FromString(name);
1143 if (pname == NULL)
1144 return NULL;
1145 result = PyImport_Import(pname);
1146 Py_DECREF(pname);
1147 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001148}
1149
Christian Heimes072c0f12008-01-03 23:01:04 +00001150/* Import a module without blocking
1151 *
1152 * At first it tries to fetch the module from sys.modules. If the module was
1153 * never loaded before it loads it with PyImport_ImportModule() unless another
1154 * thread holds the import lock. In the latter case the function raises an
1155 * ImportError instead of blocking.
1156 *
1157 * Returns the module object with incremented ref count.
1158 */
1159PyObject *
1160PyImport_ImportModuleNoBlock(const char *name)
1161{
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001162 return PyImport_ImportModule(name);
Christian Heimes072c0f12008-01-03 23:01:04 +00001163}
1164
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001165
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001166/* Remove importlib frames from the traceback,
1167 * except in Verbose mode. */
1168static void
1169remove_importlib_frames(void)
1170{
1171 const char *importlib_filename = "<frozen importlib._bootstrap>";
Nick Coghlan42c07662012-07-31 21:14:18 +10001172 const char *remove_frames = "_call_with_frames_removed";
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001173 int always_trim = 0;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001174 int in_importlib = 0;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001175 PyObject *exception, *value, *base_tb, *tb;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001176 PyObject **prev_link, **outer_link = NULL;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001177
1178 /* Synopsis: if it's an ImportError, we trim all importlib chunks
Nick Coghlan42c07662012-07-31 21:14:18 +10001179 from the traceback. We always trim chunks
1180 which end with a call to "_call_with_frames_removed". */
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001181
1182 PyErr_Fetch(&exception, &value, &base_tb);
1183 if (!exception || Py_VerboseFlag)
1184 goto done;
1185 if (PyType_IsSubtype((PyTypeObject *) exception,
1186 (PyTypeObject *) PyExc_ImportError))
1187 always_trim = 1;
1188
1189 prev_link = &base_tb;
1190 tb = base_tb;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001191 while (tb != NULL) {
1192 PyTracebackObject *traceback = (PyTracebackObject *)tb;
1193 PyObject *next = (PyObject *) traceback->tb_next;
1194 PyFrameObject *frame = traceback->tb_frame;
1195 PyCodeObject *code = frame->f_code;
1196 int now_in_importlib;
1197
1198 assert(PyTraceBack_Check(tb));
1199 now_in_importlib = (PyUnicode_CompareWithASCIIString(
1200 code->co_filename,
1201 importlib_filename) == 0);
1202 if (now_in_importlib && !in_importlib) {
1203 /* This is the link to this chunk of importlib tracebacks */
1204 outer_link = prev_link;
1205 }
1206 in_importlib = now_in_importlib;
1207
1208 if (in_importlib &&
1209 (always_trim ||
Nick Coghlan42c07662012-07-31 21:14:18 +10001210 PyUnicode_CompareWithASCIIString(code->co_name,
1211 remove_frames) == 0)) {
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001212 PyObject *tmp = *outer_link;
1213 *outer_link = next;
1214 Py_XINCREF(next);
1215 Py_DECREF(tmp);
1216 prev_link = outer_link;
1217 }
1218 else {
1219 prev_link = (PyObject **) &traceback->tb_next;
1220 }
1221 tb = next;
1222 }
1223done:
1224 PyErr_Restore(exception, value, base_tb);
1225}
1226
1227
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001228PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04001229PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
1230 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001231 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001232{
Brett Cannonfd074152012-04-14 14:10:13 -04001233 _Py_IDENTIFIER(__import__);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001234 _Py_IDENTIFIER(__initializing__);
Brett Cannonfd074152012-04-14 14:10:13 -04001235 _Py_IDENTIFIER(__package__);
1236 _Py_IDENTIFIER(__path__);
1237 _Py_IDENTIFIER(__name__);
1238 _Py_IDENTIFIER(_find_and_load);
1239 _Py_IDENTIFIER(_handle_fromlist);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001240 _Py_IDENTIFIER(_lock_unlock_module);
Brett Cannonfd074152012-04-14 14:10:13 -04001241 _Py_static_string(single_dot, ".");
1242 PyObject *abs_name = NULL;
1243 PyObject *builtins_import = NULL;
1244 PyObject *final_mod = NULL;
1245 PyObject *mod = NULL;
1246 PyObject *package = NULL;
1247 PyObject *globals = NULL;
1248 PyObject *fromlist = NULL;
1249 PyInterpreterState *interp = PyThreadState_GET()->interp;
1250
1251 /* Make sure to use default values so as to not have
1252 PyObject_CallMethodObjArgs() truncate the parameter list because of a
1253 NULL argument. */
1254 if (given_globals == NULL) {
1255 globals = PyDict_New();
1256 if (globals == NULL) {
1257 goto error;
1258 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 }
Brett Cannonfd074152012-04-14 14:10:13 -04001260 else {
1261 /* Only have to care what given_globals is if it will be used
Brett Cannonecfefb72012-08-05 19:24:57 -04001262 for something. */
Brett Cannonfd074152012-04-14 14:10:13 -04001263 if (level > 0 && !PyDict_Check(given_globals)) {
1264 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1265 goto error;
1266 }
1267 globals = given_globals;
1268 Py_INCREF(globals);
1269 }
1270
1271 if (given_fromlist == NULL) {
1272 fromlist = PyList_New(0);
1273 if (fromlist == NULL) {
1274 goto error;
1275 }
1276 }
1277 else {
1278 fromlist = given_fromlist;
1279 Py_INCREF(fromlist);
1280 }
1281 if (name == NULL) {
1282 PyErr_SetString(PyExc_ValueError, "Empty module name");
1283 goto error;
1284 }
1285
1286 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1287 for added performance. */
1288
1289 if (!PyUnicode_Check(name)) {
1290 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1291 goto error;
1292 }
1293 else if (PyUnicode_READY(name) < 0) {
1294 goto error;
1295 }
1296 if (level < 0) {
1297 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1298 goto error;
1299 }
1300 else if (level > 0) {
1301 package = _PyDict_GetItemId(globals, &PyId___package__);
1302 if (package != NULL && package != Py_None) {
1303 Py_INCREF(package);
1304 if (!PyUnicode_Check(package)) {
1305 PyErr_SetString(PyExc_TypeError, "package must be a string");
1306 goto error;
1307 }
1308 }
1309 else {
Brett Cannon273323c2012-04-17 19:05:11 -04001310 package = _PyDict_GetItemId(globals, &PyId___name__);
Brett Cannonfd074152012-04-14 14:10:13 -04001311 if (package == NULL) {
Brett Cannon273323c2012-04-17 19:05:11 -04001312 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
Brett Cannonfd074152012-04-14 14:10:13 -04001313 goto error;
1314 }
1315 else if (!PyUnicode_Check(package)) {
1316 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1317 }
1318 Py_INCREF(package);
1319
1320 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04001321 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001322 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1323 if (borrowed_dot == NULL) {
1324 goto error;
1325 }
Brett Cannon740fce02012-04-14 14:23:49 -04001326 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001327 Py_DECREF(package);
1328 if (partition == NULL) {
1329 goto error;
1330 }
1331 package = PyTuple_GET_ITEM(partition, 0);
1332 Py_INCREF(package);
1333 Py_DECREF(partition);
1334 }
1335 }
1336
1337 if (PyDict_GetItem(interp->modules, package) == NULL) {
1338 PyErr_Format(PyExc_SystemError,
1339 "Parent module %R not loaded, cannot perform relative "
1340 "import", package);
1341 goto error;
1342 }
1343 }
1344 else { /* level == 0 */
1345 if (PyUnicode_GET_LENGTH(name) == 0) {
1346 PyErr_SetString(PyExc_ValueError, "Empty module name");
1347 goto error;
1348 }
1349 package = Py_None;
1350 Py_INCREF(package);
1351 }
1352
1353 if (level > 0) {
1354 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
1355 PyObject *base = NULL;
1356 int level_up = 1;
1357
1358 for (level_up = 1; level_up < level; level_up += 1) {
1359 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1360 if (last_dot == -2) {
1361 goto error;
1362 }
1363 else if (last_dot == -1) {
1364 PyErr_SetString(PyExc_ValueError,
1365 "attempted relative import beyond top-level "
1366 "package");
1367 goto error;
1368 }
1369 }
1370 base = PyUnicode_Substring(package, 0, last_dot);
1371 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001372 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001373
1374 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001375 seq = PyTuple_Pack(2, base, name);
1376 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04001377 if (borrowed_dot == NULL || seq == NULL) {
1378 goto error;
1379 }
1380
1381 abs_name = PyUnicode_Join(borrowed_dot, seq);
1382 Py_DECREF(seq);
1383 if (abs_name == NULL) {
1384 goto error;
1385 }
1386 }
1387 else {
1388 abs_name = base;
1389 }
1390 }
1391 else {
1392 abs_name = name;
1393 Py_INCREF(abs_name);
1394 }
1395
Brian Curtine6b299f2012-04-14 14:19:33 -05001396#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001397 _PyImport_AcquireLock();
1398#endif
1399 /* From this point forward, goto error_with_unlock! */
1400 if (PyDict_Check(globals)) {
1401 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
1402 }
1403 if (builtins_import == NULL) {
1404 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
1405 if (builtins_import == NULL) {
1406 Py_FatalError("__import__ missing");
1407 }
1408 }
1409 Py_INCREF(builtins_import);
1410
1411 mod = PyDict_GetItem(interp->modules, abs_name);
1412 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04001413 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
1414 "None in sys.modules", abs_name);
1415 if (msg != NULL) {
Brian Curtin09b86d12012-04-17 16:57:09 -05001416 PyErr_SetImportError(msg, abs_name, NULL);
1417 Py_DECREF(msg);
Brett Cannon27fc5282012-04-15 14:15:31 -04001418 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02001419 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001420 goto error_with_unlock;
1421 }
1422 else if (mod != NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001423 PyObject *value;
1424 int initializing = 0;
1425
Brett Cannonfd074152012-04-14 14:10:13 -04001426 Py_INCREF(mod);
Antoine Pitrou03989852012-08-28 00:24:52 +02001427 /* Optimization: only call _bootstrap._lock_unlock_module() if
1428 __initializing__ is true.
1429 NOTE: because of this, __initializing__ must be set *before*
1430 stuffing the new module in sys.modules.
1431 */
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001432 value = _PyObject_GetAttrId(mod, &PyId___initializing__);
1433 if (value == NULL)
1434 PyErr_Clear();
1435 else {
1436 initializing = PyObject_IsTrue(value);
1437 Py_DECREF(value);
1438 if (initializing == -1)
1439 PyErr_Clear();
1440 }
1441 if (initializing > 0) {
1442 /* _bootstrap._lock_unlock_module() releases the import lock */
1443 value = _PyObject_CallMethodObjIdArgs(interp->importlib,
1444 &PyId__lock_unlock_module, abs_name,
1445 NULL);
1446 if (value == NULL)
1447 goto error;
1448 Py_DECREF(value);
1449 }
1450 else {
1451#ifdef WITH_THREAD
1452 if (_PyImport_ReleaseLock() < 0) {
1453 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1454 goto error;
1455 }
1456#endif
1457 }
Brett Cannonfd074152012-04-14 14:10:13 -04001458 }
1459 else {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001460 /* _bootstrap._find_and_load() releases the import lock */
Brett Cannonfd074152012-04-14 14:10:13 -04001461 mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1462 &PyId__find_and_load, abs_name,
1463 builtins_import, NULL);
1464 if (mod == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001465 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001466 }
1467 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001468 /* From now on we don't hold the import lock anymore. */
Brett Cannonfd074152012-04-14 14:10:13 -04001469
1470 if (PyObject_Not(fromlist)) {
1471 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
1472 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05001473 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001474 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1475
1476 if (borrowed_dot == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001477 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001478 }
1479
Brian Curtine6b299f2012-04-14 14:19:33 -05001480 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001481 if (partition == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001482 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001483 }
1484
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001485 if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) {
1486 /* No dot in module name, simple exit */
1487 Py_DECREF(partition);
1488 final_mod = mod;
1489 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001490 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001491 }
1492
Brett Cannonfd074152012-04-14 14:10:13 -04001493 front = PyTuple_GET_ITEM(partition, 0);
1494 Py_INCREF(front);
1495 Py_DECREF(partition);
1496
1497 if (level == 0) {
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001498 final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL);
Antoine Pitroub78174c2012-05-06 17:15:23 +02001499 Py_DECREF(front);
Brett Cannonfd074152012-04-14 14:10:13 -04001500 }
1501 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001502 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
1503 PyUnicode_GET_LENGTH(front);
1504 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001505 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001506 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001507 Py_DECREF(front);
1508 if (to_return == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001509 goto error;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001510 }
Brett Cannonfd074152012-04-14 14:10:13 -04001511
1512 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001513 if (final_mod == NULL) {
1514 PyErr_Format(PyExc_KeyError,
1515 "%R not in sys.modules as expected",
1516 to_return);
1517 }
1518 else {
1519 Py_INCREF(final_mod);
1520 }
Antoine Pitroub78174c2012-05-06 17:15:23 +02001521 Py_DECREF(to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04001522 }
1523 }
1524 else {
1525 final_mod = mod;
1526 Py_INCREF(mod);
1527 }
1528 }
1529 else {
1530 final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1531 &PyId__handle_fromlist, mod,
1532 fromlist, builtins_import,
1533 NULL);
1534 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001535 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001536
Brett Cannonfd074152012-04-14 14:10:13 -04001537 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05001538#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001539 if (_PyImport_ReleaseLock() < 0) {
1540 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1541 }
1542#endif
1543 error:
1544 Py_XDECREF(abs_name);
1545 Py_XDECREF(builtins_import);
1546 Py_XDECREF(mod);
1547 Py_XDECREF(package);
1548 Py_XDECREF(globals);
1549 Py_XDECREF(fromlist);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001550 if (final_mod == NULL)
1551 remove_importlib_frames();
Brett Cannonfd074152012-04-14 14:10:13 -04001552 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001553}
1554
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001555PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001556PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001557 PyObject *fromlist, int level)
1558{
1559 PyObject *nameobj, *mod;
1560 nameobj = PyUnicode_FromString(name);
1561 if (nameobj == NULL)
1562 return NULL;
1563 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1564 fromlist, level);
1565 Py_DECREF(nameobj);
1566 return mod;
1567}
1568
1569
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001570/* Re-import a module of any kind and return its module object, WITH
1571 INCREMENTED REFERENCE COUNT */
1572
Guido van Rossum79f25d91997-04-29 20:08:16 +00001573PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001574PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001575{
Brett Cannon62228db2012-04-29 14:38:11 -04001576 _Py_IDENTIFIER(reload);
1577 PyObject *reloaded_module = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon62228db2012-04-29 14:38:11 -04001579 PyObject *imp = PyDict_GetItemString(modules, "imp");
1580 if (imp == NULL) {
1581 imp = PyImport_ImportModule("imp");
1582 if (imp == NULL) {
1583 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001584 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 }
Brett Cannon62228db2012-04-29 14:38:11 -04001586 else {
1587 Py_INCREF(imp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001589
Brett Cannon62228db2012-04-29 14:38:11 -04001590 reloaded_module = _PyObject_CallMethodId(imp, &PyId_reload, "O", m);
1591 Py_DECREF(imp);
1592 return reloaded_module;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001593}
1594
1595
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001596/* Higher-level import emulator which emulates the "import" statement
1597 more accurately -- it invokes the __import__() function from the
1598 builtins of the current globals. This means that the import is
1599 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001600 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001601 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001602 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001603 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001604
1605PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001606PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001607{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001608 static PyObject *silly_list = NULL;
1609 static PyObject *builtins_str = NULL;
1610 static PyObject *import_str = NULL;
1611 PyObject *globals = NULL;
1612 PyObject *import = NULL;
1613 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001614 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001615 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 /* Initialize constant string objects */
1618 if (silly_list == NULL) {
1619 import_str = PyUnicode_InternFromString("__import__");
1620 if (import_str == NULL)
1621 return NULL;
1622 builtins_str = PyUnicode_InternFromString("__builtins__");
1623 if (builtins_str == NULL)
1624 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001625 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 if (silly_list == NULL)
1627 return NULL;
1628 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 /* Get the builtins from current globals */
1631 globals = PyEval_GetGlobals();
1632 if (globals != NULL) {
1633 Py_INCREF(globals);
1634 builtins = PyObject_GetItem(globals, builtins_str);
1635 if (builtins == NULL)
1636 goto err;
1637 }
1638 else {
1639 /* No globals -- use standard builtins, and fake globals */
1640 builtins = PyImport_ImportModuleLevel("builtins",
1641 NULL, NULL, NULL, 0);
1642 if (builtins == NULL)
1643 return NULL;
1644 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1645 if (globals == NULL)
1646 goto err;
1647 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001648
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001649 /* Get the __import__ function from the builtins */
1650 if (PyDict_Check(builtins)) {
1651 import = PyObject_GetItem(builtins, import_str);
1652 if (import == NULL)
1653 PyErr_SetObject(PyExc_KeyError, import_str);
1654 }
1655 else
1656 import = PyObject_GetAttr(builtins, import_str);
1657 if (import == NULL)
1658 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001660 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001661 Always use absolute import here.
1662 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1664 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001665 if (r == NULL)
1666 goto err;
1667 Py_DECREF(r);
1668
1669 modules = PyImport_GetModuleDict();
1670 r = PyDict_GetItem(modules, module_name);
1671 if (r != NULL)
1672 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001673
1674 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 Py_XDECREF(globals);
1676 Py_XDECREF(builtins);
1677 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001680}
1681
Barry Warsaw28a691b2010-04-17 00:19:56 +00001682static PyObject *
Brett Cannon2657df42012-05-04 15:20:40 -04001683imp_extension_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001684{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 PyObject *list;
Brett Cannon2657df42012-05-04 15:20:40 -04001686 const char *suffix;
1687 unsigned int index = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 list = PyList_New(0);
1690 if (list == NULL)
1691 return NULL;
Brett Cannon2657df42012-05-04 15:20:40 -04001692#ifdef HAVE_DYNAMIC_LOADING
1693 while ((suffix = _PyImport_DynLoadFiletab[index])) {
1694 PyObject *item = PyUnicode_FromString(suffix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001695 if (item == NULL) {
1696 Py_DECREF(list);
1697 return NULL;
1698 }
1699 if (PyList_Append(list, item) < 0) {
1700 Py_DECREF(list);
1701 Py_DECREF(item);
1702 return NULL;
1703 }
1704 Py_DECREF(item);
Brett Cannon2657df42012-05-04 15:20:40 -04001705 index += 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 }
Brett Cannon2657df42012-05-04 15:20:40 -04001707#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001709}
1710
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001712imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713{
Victor Stinner95872862011-03-07 18:20:56 +01001714 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001715 int ret;
1716 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01001717 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001718 return NULL;
1719 ret = init_builtin(name);
1720 if (ret < 0)
1721 return NULL;
1722 if (ret == 0) {
1723 Py_INCREF(Py_None);
1724 return Py_None;
1725 }
Victor Stinner95872862011-03-07 18:20:56 +01001726 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001727 Py_XINCREF(m);
1728 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001729}
1730
Guido van Rossum79f25d91997-04-29 20:08:16 +00001731static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001732imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733{
Victor Stinner53dc7352011-03-20 01:50:21 +01001734 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 int ret;
1736 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01001737 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001738 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001739 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 if (ret < 0)
1741 return NULL;
1742 if (ret == 0) {
1743 Py_INCREF(Py_None);
1744 return Py_None;
1745 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001746 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 Py_XINCREF(m);
1748 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001749}
1750
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001752imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001753{
Victor Stinner53dc7352011-03-20 01:50:21 +01001754 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001755
Victor Stinner53dc7352011-03-20 01:50:21 +01001756 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 return NULL;
1758 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001759}
1760
Guido van Rossum79f25d91997-04-29 20:08:16 +00001761static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00001762imp_is_frozen_package(PyObject *self, PyObject *args)
1763{
Victor Stinner53dc7352011-03-20 01:50:21 +01001764 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00001765
Victor Stinner53dc7352011-03-20 01:50:21 +01001766 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 return NULL;
1768 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00001769}
1770
1771static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001772imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001773{
Victor Stinner95872862011-03-07 18:20:56 +01001774 PyObject *name;
1775 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 return NULL;
1777 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001778}
1779
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001781imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782{
Victor Stinner53dc7352011-03-20 01:50:21 +01001783 PyObject *name;
Benjamin Peterson6fba3db2013-03-18 23:13:31 -07001784 const struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001785 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 return NULL;
1787 p = find_frozen(name);
1788 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001789}
1790
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001791#ifdef HAVE_DYNAMIC_LOADING
1792
Guido van Rossum79f25d91997-04-29 20:08:16 +00001793static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001794imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001796 PyObject *name, *pathname, *fob = NULL, *mod;
1797 FILE *fp;
1798
1799 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
1800 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001802 if (fob != NULL) {
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001803 fp = _Py_fopen(pathname, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001804 if (fp == NULL) {
1805 Py_DECREF(pathname);
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001806 if (!PyErr_Occurred())
1807 PyErr_SetFromErrno(PyExc_IOError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001808 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001809 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001811 else
1812 fp = NULL;
1813 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001814 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 if (fp)
1816 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001817 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818}
1819
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001820#endif /* HAVE_DYNAMIC_LOADING */
1821
Barry Warsaw28a691b2010-04-17 00:19:56 +00001822
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001823/* Doc strings */
1824
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001825PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04001826"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001827
Brett Cannon2657df42012-05-04 15:20:40 -04001828PyDoc_STRVAR(doc_extension_suffixes,
1829"extension_suffixes() -> list of strings\n\
1830Returns the list of file suffixes used to identify extension modules.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001831
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001832PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00001833"lock_held() -> boolean\n\
1834Return True if the import lock is currently held, else False.\n\
1835On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00001836
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001837PyDoc_STRVAR(doc_acquire_lock,
1838"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00001839Acquires the interpreter's import lock for the current thread.\n\
1840This lock should be used by import hooks to ensure thread-safety\n\
1841when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001842On platforms without threads, this function does nothing.");
1843
1844PyDoc_STRVAR(doc_release_lock,
1845"release_lock() -> None\n\
1846Release the interpreter's import lock.\n\
1847On platforms without threads, this function does nothing.");
1848
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849static PyMethodDef imp_methods[] = {
Brett Cannon2657df42012-05-04 15:20:40 -04001850 {"extension_suffixes", imp_extension_suffixes, METH_NOARGS,
1851 doc_extension_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
1853 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
1854 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
1856 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
1857 {"init_builtin", imp_init_builtin, METH_VARARGS},
1858 {"init_frozen", imp_init_frozen, METH_VARARGS},
1859 {"is_builtin", imp_is_builtin, METH_VARARGS},
1860 {"is_frozen", imp_is_frozen, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001861#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001863#endif
Brett Cannon442c9b92011-03-23 16:14:42 -07001864 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866};
1867
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001868
Martin v. Löwis1a214512008-06-11 05:26:20 +00001869static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04001871 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001872 doc_imp,
1873 0,
1874 imp_methods,
1875 NULL,
1876 NULL,
1877 NULL,
1878 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001879};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001880
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001881PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001882PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001883{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001884 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 m = PyModule_Create(&impmodule);
1887 if (m == NULL)
1888 goto failure;
1889 d = PyModule_GetDict(m);
1890 if (d == NULL)
1891 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001894 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 Py_XDECREF(m);
1896 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001897}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001898
1899
Guido van Rossumb18618d2000-05-03 23:44:39 +00001900/* API for embedding applications that want to add their own entries
1901 to the table of built-in modules. This should normally be called
1902 *before* Py_Initialize(). When the table resize fails, -1 is
1903 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001904
1905 After a similar function by Just van Rossum. */
1906
1907int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001908PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001909{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001910 static struct _inittab *our_copy = NULL;
1911 struct _inittab *p;
1912 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 /* Count the number of entries in both tables */
1915 for (n = 0; newtab[n].name != NULL; n++)
1916 ;
1917 if (n == 0)
1918 return 0; /* Nothing to do */
1919 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
1920 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 /* Allocate new memory for the combined table */
1923 p = our_copy;
1924 PyMem_RESIZE(p, struct _inittab, i+n+1);
1925 if (p == NULL)
1926 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001927
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001928 /* Copy the tables into the new memory */
1929 if (our_copy != PyImport_Inittab)
1930 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
1931 PyImport_Inittab = our_copy = p;
1932 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001935}
1936
1937/* Shorthand to add a single entry given a name and a function */
1938
1939int
Brett Cannona826f322009-04-02 03:41:46 +00001940PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001941{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001946 newtab[0].name = (char *)name;
1947 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00001950}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001951
1952#ifdef __cplusplus
1953}
1954#endif