blob: aeaa9c05c3588ac6c605a595ebb943a3da88ba63 [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 }
172 import_lock_thread = me;
173 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000174}
175
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000176int
177_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000178{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000179 long me = PyThread_get_thread_ident();
180 if (me == -1 || import_lock == NULL)
181 return 0; /* Too bad */
182 if (import_lock_thread != me)
183 return -1;
184 import_lock_level--;
185 if (import_lock_level == 0) {
186 import_lock_thread = -1;
187 PyThread_release_lock(import_lock);
188 }
189 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000190}
191
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000192/* This function is called from PyOS_AfterFork to ensure that newly
193 created child processes do not share locks with the parent.
194 We now acquire the import lock around fork() calls but on some platforms
195 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000196
197void
198_PyImport_ReInitLock(void)
199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 if (import_lock != NULL)
201 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000202 if (import_lock_level > 1) {
203 /* Forked as a side effect of import */
204 long me = PyThread_get_thread_ident();
205 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100206 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000207 import_lock_thread = me;
208 import_lock_level--;
209 } else {
210 import_lock_thread = -1;
211 import_lock_level = 0;
212 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000213}
214
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000215#endif
216
Tim Peters69232342001-08-30 05:16:13 +0000217static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000218imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000219{
Tim Peters69232342001-08-30 05:16:13 +0000220#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000221 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000222#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000224#endif
225}
226
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000227static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000228imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000229{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000230#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000231 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000232#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 Py_INCREF(Py_None);
234 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000235}
236
237static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000238imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000239{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000240#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 if (_PyImport_ReleaseLock() < 0) {
242 PyErr_SetString(PyExc_RuntimeError,
243 "not holding the import lock");
244 return NULL;
245 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000246#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 Py_INCREF(Py_None);
248 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000249}
250
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100251void
252_PyImport_Fini(void)
253{
254 Py_XDECREF(extensions);
255 extensions = NULL;
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100256#ifdef WITH_THREAD
257 if (import_lock != NULL) {
258 PyThread_free_lock(import_lock);
259 import_lock = NULL;
260 }
261#endif
262}
263
Guido van Rossum25ce5661997-08-02 03:10:38 +0000264/* Helper for sys */
265
266PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000267PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000268{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000269 PyInterpreterState *interp = PyThreadState_GET()->interp;
270 if (interp->modules == NULL)
271 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
272 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000273}
274
Guido van Rossum3f5da241990-12-20 15:06:42 +0000275
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000276/* List of names to clear in sys */
277static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 "path", "argv", "ps1", "ps2",
279 "last_type", "last_value", "last_traceback",
280 "path_hooks", "path_importer_cache", "meta_path",
281 /* misc stuff */
282 "flags", "float_info",
283 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000284};
285
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000286static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 "stdin", "__stdin__",
288 "stdout", "__stdout__",
289 "stderr", "__stderr__",
290 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000291};
292
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000293
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000294/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000295
Guido van Rossum3f5da241990-12-20 15:06:42 +0000296void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000297PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000298{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 PyObject *key, *value, *dict;
301 PyInterpreterState *interp = PyThreadState_GET()->interp;
302 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000304 if (modules == NULL)
305 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000307 /* Delete some special variables first. These are common
308 places where user values hide and people complain when their
309 destructors fail. Since the modules containing them are
310 deleted *last* of all, they would come too late in the normal
311 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000313 value = PyDict_GetItemString(modules, "builtins");
314 if (value != NULL && PyModule_Check(value)) {
315 dict = PyModule_GetDict(value);
316 if (Py_VerboseFlag)
317 PySys_WriteStderr("# clear builtins._\n");
318 PyDict_SetItemString(dict, "_", Py_None);
319 }
320 value = PyDict_GetItemString(modules, "sys");
321 if (value != NULL && PyModule_Check(value)) {
322 char **p;
323 PyObject *v;
324 dict = PyModule_GetDict(value);
325 for (p = sys_deletes; *p != NULL; p++) {
326 if (Py_VerboseFlag)
327 PySys_WriteStderr("# clear sys.%s\n", *p);
328 PyDict_SetItemString(dict, *p, Py_None);
329 }
330 for (p = sys_files; *p != NULL; p+=2) {
331 if (Py_VerboseFlag)
332 PySys_WriteStderr("# restore sys.%s\n", *p);
333 v = PyDict_GetItemString(dict, *(p+1));
334 if (v == NULL)
335 v = Py_None;
336 PyDict_SetItemString(dict, *p, v);
337 }
338 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000340 /* First, delete __main__ */
341 value = PyDict_GetItemString(modules, "__main__");
342 if (value != NULL && PyModule_Check(value)) {
343 if (Py_VerboseFlag)
344 PySys_WriteStderr("# cleanup __main__\n");
345 _PyModule_Clear(value);
346 PyDict_SetItemString(modules, "__main__", Py_None);
347 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000348
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 /* The special treatment of "builtins" here is because even
350 when it's not referenced as a module, its dictionary is
351 referenced by almost every module's __builtins__. Since
352 deleting a module clears its dictionary (even if there are
353 references left to it), we need to delete the "builtins"
354 module last. Likewise, we don't delete sys until the very
355 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 Also note that we 'delete' modules by replacing their entry
358 in the modules dict with None, rather than really deleting
359 them; this avoids a rehash of the modules dictionary and
360 also marks them as "non existent" so they won't be
361 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 /* Next, repeatedly delete modules with a reference count of
364 one (skipping builtins and sys) and delete them */
365 do {
366 ndone = 0;
367 pos = 0;
368 while (PyDict_Next(modules, &pos, &key, &value)) {
369 if (value->ob_refcnt != 1)
370 continue;
371 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100372 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000373 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100374 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 continue;
376 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100377 PySys_FormatStderr(
378 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 _PyModule_Clear(value);
380 PyDict_SetItem(modules, key, Py_None);
381 ndone++;
382 }
383 }
384 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 /* Next, delete all modules (still skipping builtins and sys) */
387 pos = 0;
388 while (PyDict_Next(modules, &pos, &key, &value)) {
389 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100390 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000391 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100392 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 continue;
394 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100395 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 _PyModule_Clear(value);
397 PyDict_SetItem(modules, key, Py_None);
398 }
399 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 /* Next, delete sys and builtins (in that order) */
402 value = PyDict_GetItemString(modules, "sys");
403 if (value != NULL && PyModule_Check(value)) {
404 if (Py_VerboseFlag)
405 PySys_WriteStderr("# cleanup sys\n");
406 _PyModule_Clear(value);
407 PyDict_SetItemString(modules, "sys", Py_None);
408 }
409 value = PyDict_GetItemString(modules, "builtins");
410 if (value != NULL && PyModule_Check(value)) {
411 if (Py_VerboseFlag)
412 PySys_WriteStderr("# cleanup builtins\n");
413 _PyModule_Clear(value);
414 PyDict_SetItemString(modules, "builtins", Py_None);
415 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 /* Finally, clear and delete the modules directory */
418 PyDict_Clear(modules);
419 interp->modules = NULL;
420 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000421}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000422
423
Barry Warsaw28a691b2010-04-17 00:19:56 +0000424/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000425
426long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000427PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000428{
Brett Cannon77b2abd2012-07-09 16:09:00 -0400429 PyInterpreterState *interp = PyThreadState_Get()->interp;
430 PyObject *pyc_magic = PyObject_GetAttrString(interp->importlib,
431 "_RAW_MAGIC_NUMBER");
432 if (pyc_magic == NULL)
433 return -1;
Benjamin Peterson66f36592012-07-09 22:21:55 -0700434 long res = PyLong_AsLong(pyc_magic);
435 Py_DECREF(pyc_magic);
436 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437}
438
439
Brett Cannon3adc7b72012-07-09 14:22:12 -0400440extern const char * _PySys_ImplCacheTag;
441
Barry Warsaw28a691b2010-04-17 00:19:56 +0000442const char *
443PyImport_GetMagicTag(void)
444{
Brett Cannon3adc7b72012-07-09 14:22:12 -0400445 return _PySys_ImplCacheTag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000446}
447
Brett Cannon98979b82012-07-02 15:13:11 -0400448
Guido van Rossum25ce5661997-08-02 03:10:38 +0000449/* Magic for extension modules (built-in as well as dynamically
450 loaded). To prevent initializing an extension module more than
451 once, we keep a static dictionary 'extensions' keyed by module name
452 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000453 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100454 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000455 immediately after the module initialization function succeeds. A
456 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100457 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000458
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000459 Modules which do support multiple initialization set their m_size
460 field to a non-negative number (indicating the size of the
461 module-specific state). They are still recorded in the extensions
462 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000463*/
464
465int
Victor Stinner95872862011-03-07 18:20:56 +0100466_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
467 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000468{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000469 PyObject *modules, *dict;
470 struct PyModuleDef *def;
471 if (extensions == NULL) {
472 extensions = PyDict_New();
473 if (extensions == NULL)
474 return -1;
475 }
476 if (mod == NULL || !PyModule_Check(mod)) {
477 PyErr_BadInternalCall();
478 return -1;
479 }
480 def = PyModule_GetDef(mod);
481 if (!def) {
482 PyErr_BadInternalCall();
483 return -1;
484 }
485 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100486 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 return -1;
488 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100489 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 return -1;
491 }
492 if (def->m_size == -1) {
493 if (def->m_base.m_copy) {
494 /* Somebody already imported the module,
495 likely under a different name.
496 XXX this should really not happen. */
497 Py_DECREF(def->m_base.m_copy);
498 def->m_base.m_copy = NULL;
499 }
500 dict = PyModule_GetDict(mod);
501 if (dict == NULL)
502 return -1;
503 def->m_base.m_copy = PyDict_Copy(dict);
504 if (def->m_base.m_copy == NULL)
505 return -1;
506 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000507 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000509}
510
Victor Stinner49d3f252010-10-17 01:24:53 +0000511int
512_PyImport_FixupBuiltin(PyObject *mod, char *name)
513{
514 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100515 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100516 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100517 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000518 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100519 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
520 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000521 return res;
522}
523
Guido van Rossum25ce5661997-08-02 03:10:38 +0000524PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100525_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000526{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 PyObject *mod, *mdict;
528 PyModuleDef* def;
529 if (extensions == NULL)
530 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000531 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 if (def == NULL)
533 return NULL;
534 if (def->m_size == -1) {
535 /* Module does not support repeated initialization */
536 if (def->m_base.m_copy == NULL)
537 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100538 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 if (mod == NULL)
540 return NULL;
541 mdict = PyModule_GetDict(mod);
542 if (mdict == NULL)
543 return NULL;
544 if (PyDict_Update(mdict, def->m_base.m_copy))
545 return NULL;
546 }
547 else {
548 if (def->m_base.m_init == NULL)
549 return NULL;
550 mod = def->m_base.m_init();
551 if (mod == NULL)
552 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100553 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 Py_DECREF(mod);
555 }
556 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100557 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 Py_DECREF(mod);
559 return NULL;
560 }
561 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100562 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 name, filename);
564 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000565
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566}
567
Victor Stinner49d3f252010-10-17 01:24:53 +0000568PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000569_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000570{
Victor Stinner95872862011-03-07 18:20:56 +0100571 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100572 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100573 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000574 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100575 res = _PyImport_FindExtensionObject(nameobj, nameobj);
576 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000577 return res;
578}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579
580/* Get the module object corresponding to a module name.
581 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000582 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000583 Because the former action is most common, THIS DOES NOT RETURN A
584 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000587PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 PyObject *modules = PyImport_GetModuleDict();
590 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591
Victor Stinner27ee0892011-03-04 12:57:09 +0000592 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 PyModule_Check(m))
594 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000595 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 if (m == NULL)
597 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000598 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 Py_DECREF(m);
600 return NULL;
601 }
602 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000605}
606
Victor Stinner27ee0892011-03-04 12:57:09 +0000607PyObject *
608PyImport_AddModule(const char *name)
609{
610 PyObject *nameobj, *module;
611 nameobj = PyUnicode_FromString(name);
612 if (nameobj == NULL)
613 return NULL;
614 module = PyImport_AddModuleObject(nameobj);
615 Py_DECREF(nameobj);
616 return module;
617}
618
619
Tim Peters1cd70172004-08-02 03:52:12 +0000620/* Remove name from sys.modules, if it's there. */
621static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000622remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000623{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000625 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000627 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 Py_FatalError("import: deleting existing key in"
629 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000630}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000631
Victor Stinnerc9abda02011-03-14 13:33:46 -0400632static PyObject * get_sourcefile(PyObject *filename);
633static PyObject *make_source_pathname(PyObject *pathname);
Christian Heimes3b06e532008-01-07 20:12:44 +0000634
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000635/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000636 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
637 * removed from sys.modules, to avoid leaving damaged module objects
638 * in sys.modules. The caller may wish to restore the original
639 * module object (if any) in this case; PyImport_ReloadModule is an
640 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000641 *
642 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
643 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000644 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000645PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 return PyImport_ExecCodeModuleWithPathnames(
649 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000650}
651
652PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000653PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 return PyImport_ExecCodeModuleWithPathnames(
656 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000657}
658
659PyObject *
660PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000662{
Victor Stinner27ee0892011-03-04 12:57:09 +0000663 PyObject *m = NULL;
664 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
665
666 nameobj = PyUnicode_FromString(name);
667 if (nameobj == NULL)
668 return NULL;
669
670 if (pathname != NULL) {
671 pathobj = PyUnicode_DecodeFSDefault(pathname);
672 if (pathobj == NULL)
673 goto error;
674 } else
675 pathobj = NULL;
676 if (cpathname != NULL) {
677 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
678 if (cpathobj == NULL)
679 goto error;
680 } else
681 cpathobj = NULL;
682 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
683error:
684 Py_DECREF(nameobj);
685 Py_XDECREF(pathobj);
686 Py_XDECREF(cpathobj);
687 return m;
688}
689
690PyObject*
691PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
692 PyObject *cpathname)
693{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 PyObject *modules = PyImport_GetModuleDict();
695 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696
Victor Stinner27ee0892011-03-04 12:57:09 +0000697 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 if (m == NULL)
699 return NULL;
700 /* If the module is being reloaded, we get the old module back
701 and re-use its dict to exec the new code. */
702 d = PyModule_GetDict(m);
703 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
704 if (PyDict_SetItemString(d, "__builtins__",
705 PyEval_GetBuiltins()) != 0)
706 goto error;
707 }
708 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400710 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if (v == NULL)
712 PyErr_Clear();
713 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000714 else
715 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 if (v == NULL) {
717 v = ((PyCodeObject *)co)->co_filename;
718 Py_INCREF(v);
719 }
720 if (PyDict_SetItemString(d, "__file__", v) != 0)
721 PyErr_Clear(); /* Not important enough to report */
722 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000725 if (cpathname != NULL)
726 v = cpathname;
727 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729 if (PyDict_SetItemString(d, "__cached__", v) != 0)
730 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000731
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000732 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000733 if (v == NULL)
734 goto error;
735 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000736
Victor Stinner27ee0892011-03-04 12:57:09 +0000737 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000739 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 name);
741 return NULL;
742 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000747
748 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 remove_module(name);
750 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751}
752
753
Martin v. Löwis2db72862011-10-23 17:29:08 +0200754/* Like rightmost_sep, but operate on unicode objects. */
755static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200756rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200757{
758 Py_ssize_t found, i;
759 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200760 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200761 c = PyUnicode_READ_CHAR(o, i);
762 if (c == SEP
763#ifdef ALTSEP
764 || c == ALTSEP
765#endif
766 )
767 {
768 found = i;
769 }
770 }
771 return found;
772}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400773
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774
Barry Warsaw28a691b2010-04-17 00:19:56 +0000775/* Given a pathname to a Python byte compiled file, return the path to the
776 source file, if the path matches the PEP 3147 format. This does not check
777 for any file existence, however, if the pyc file name does not match PEP
778 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400779 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780
Victor Stinnerc9abda02011-03-14 13:33:46 -0400781 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
782
783static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200784make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000785{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200786 Py_ssize_t left, right, dot0, dot1, len;
787 Py_ssize_t i, j;
788 PyObject *result;
789 int kind;
790 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400791
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200792 len = PyUnicode_GET_LENGTH(path);
793 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200794 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 /* Look back two slashes from the end. In between these two slashes
797 must be the string __pycache__ or this is not a PEP 3147 style
798 path. It's possible for there to be only one slash.
799 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200800 right = rightmost_sep_obj(path, 0, len);
801 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200803 left = rightmost_sep_obj(path, 0, right);
804 if (left == -1)
805 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 else
807 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200808 if (right-left != sizeof(CACHEDIR)-1)
809 return NULL;
810 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
811 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
812 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 /* Now verify that the path component to the right of the last slash
815 has two dots in it.
816 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200817 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
818 if (dot0 < 0)
819 return NULL;
820 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
821 if (dot1 < 0)
822 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200824 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
825 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000826
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 /* This is a PEP 3147 path. Start by copying everything from the
828 start of pathname up to and including the leftmost slash. Then
829 copy the file's basename, removing the magic tag and adding a .py
830 suffix.
831 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200832 result = PyUnicode_New(left + (dot0-right) + 2,
833 PyUnicode_MAX_CHAR_VALUE(path));
834 if (!result)
835 return NULL;
836 kind = PyUnicode_KIND(result);
837 data = PyUnicode_DATA(result);
838 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
839 PyUnicode_CopyCharacters(result, left, path, right+1,
840 (j = dot0-right));
841 PyUnicode_WRITE(kind, data, i+j, 'p');
842 PyUnicode_WRITE(kind, data, i+j+1, 'y');
Victor Stinner8f825062012-04-27 13:55:39 +0200843 assert(_PyUnicode_CheckConsistency(result, 1));
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200844 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000845}
846
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000848static void
849update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
850{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 PyObject *constants, *tmp;
852 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 if (PyUnicode_Compare(co->co_filename, oldname))
855 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000856
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 tmp = co->co_filename;
858 co->co_filename = newname;
859 Py_INCREF(co->co_filename);
860 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000861
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 constants = co->co_consts;
863 n = PyTuple_GET_SIZE(constants);
864 for (i = 0; i < n; i++) {
865 tmp = PyTuple_GET_ITEM(constants, i);
866 if (PyCode_Check(tmp))
867 update_code_filenames((PyCodeObject *)tmp,
868 oldname, newname);
869 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000870}
871
Victor Stinner2f42ae52011-03-20 00:41:24 +0100872static void
873update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000874{
Victor Stinner2f42ae52011-03-20 00:41:24 +0100875 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000876
Victor Stinner2f42ae52011-03-20 00:41:24 +0100877 if (PyUnicode_Compare(co->co_filename, newname) == 0)
878 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 oldname = co->co_filename;
881 Py_INCREF(oldname);
882 update_code_filenames(co, oldname, newname);
883 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000884}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885
Brett Cannon442c9b92011-03-23 16:14:42 -0700886static PyObject *
887imp_fix_co_filename(PyObject *self, PyObject *args)
888{
889 PyObject *co;
890 PyObject *file_path;
891
892 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
893 return NULL;
894
895 if (!PyCode_Check(co)) {
896 PyErr_SetString(PyExc_TypeError,
897 "first argument must be a code object");
898 return NULL;
899 }
900
901 if (!PyUnicode_Check(file_path)) {
902 PyErr_SetString(PyExc_TypeError,
903 "second argument must be a string");
904 return NULL;
905 }
906
907 update_compiled_module((PyCodeObject*)co, file_path);
908
909 Py_RETURN_NONE;
910}
911
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912
Christian Heimes3b06e532008-01-07 20:12:44 +0000913/* Get source file -> unicode or None
914 * Returns the path to the py file if available, else the given path
915 */
916static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -0400917get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +0000918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 Py_ssize_t len;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400920 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 struct stat statbuf;
Victor Stinnerbd0850b2011-12-18 20:47:30 +0100922 int err;
Victor Stinner81c39a82012-06-16 03:22:05 +0200923 void *data;
924 unsigned int kind;
Christian Heimes3b06e532008-01-07 20:12:44 +0000925
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200926 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -0400927 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +0000929
Victor Stinnerc9abda02011-03-14 13:33:46 -0400930 /* don't match *.pyc or *.pyo? */
Victor Stinner81c39a82012-06-16 03:22:05 +0200931 data = PyUnicode_DATA(filename);
932 kind = PyUnicode_KIND(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -0400933 if (len < 5
Victor Stinner81c39a82012-06-16 03:22:05 +0200934 || PyUnicode_READ(kind, data, len-4) != '.'
935 || (PyUnicode_READ(kind, data, len-3) != 'p'
936 && PyUnicode_READ(kind, data, len-3) != 'P')
937 || (PyUnicode_READ(kind, data, len-2) != 'y'
938 && PyUnicode_READ(kind, data, len-2) != 'Y'))
Victor Stinnerc9abda02011-03-14 13:33:46 -0400939 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +0000940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 /* Start by trying to turn PEP 3147 path into source path. If that
942 * fails, just chop off the trailing character, i.e. legacy pyc path
943 * to py.
944 */
Victor Stinnerc9abda02011-03-14 13:33:46 -0400945 py = make_source_pathname(filename);
946 if (py == NULL) {
947 PyErr_Clear();
Victor Stinner81c39a82012-06-16 03:22:05 +0200948 py = PyUnicode_Substring(filename, 0, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000949 }
Victor Stinnerc9abda02011-03-14 13:33:46 -0400950 if (py == NULL)
951 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000952
Victor Stinnerbd0850b2011-12-18 20:47:30 +0100953 err = _Py_stat(py, &statbuf);
954 if (err == -2)
955 goto error;
Victor Stinner81c39a82012-06-16 03:22:05 +0200956 if (err == 0 && S_ISREG(statbuf.st_mode))
Victor Stinnerc9abda02011-03-14 13:33:46 -0400957 return py;
958 Py_DECREF(py);
959 goto unchanged;
960
961error:
962 PyErr_Clear();
963unchanged:
964 Py_INCREF(filename);
965 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +0000966}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000967
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000968/* Forward */
Victor Stinner53dc7352011-03-20 01:50:21 +0100969static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000970
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000971
972/* Helper to test for built-in module */
973
974static int
Victor Stinner95872862011-03-07 18:20:56 +0100975is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000976{
Victor Stinner95872862011-03-07 18:20:56 +0100977 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +0100979 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
980 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 if (PyImport_Inittab[i].initfunc == NULL)
982 return -1;
983 else
984 return 1;
985 }
986 }
987 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000988}
989
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000990
Just van Rossum52e14d62002-12-30 22:08:05 +0000991/* Return an importer object for a sys.path/pkg.__path__ item 'p',
992 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +0000993 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +0000994 that can handle the path item. Return None if no hook could;
995 this tells our caller it should fall back to the builtin
996 import mechanism. Cache the result in path_importer_cache.
997 Returns a borrowed reference. */
998
999static PyObject *
1000get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001002{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 PyObject *importer;
1004 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 /* These conditions are the caller's responsibility: */
1007 assert(PyList_Check(path_hooks));
1008 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 nhooks = PyList_Size(path_hooks);
1011 if (nhooks < 0)
1012 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 importer = PyDict_GetItem(path_importer_cache, p);
1015 if (importer != NULL)
1016 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 /* set path_importer_cache[p] to None to avoid recursion */
1019 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1020 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 for (j = 0; j < nhooks; j++) {
1023 PyObject *hook = PyList_GetItem(path_hooks, j);
1024 if (hook == NULL)
1025 return NULL;
1026 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1027 if (importer != NULL)
1028 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1031 return NULL;
1032 }
1033 PyErr_Clear();
1034 }
1035 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -04001036 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001037 }
1038 if (importer != NULL) {
1039 int err = PyDict_SetItem(path_importer_cache, p, importer);
1040 Py_DECREF(importer);
1041 if (err != 0)
1042 return NULL;
1043 }
1044 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001045}
1046
Christian Heimes9cd17752007-11-18 19:35:23 +00001047PyAPI_FUNC(PyObject *)
1048PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1052 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1053 importer = get_path_importer(path_importer_cache,
1054 path_hooks, path);
1055 }
1056 }
1057 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1058 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001059}
1060
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061
Victor Stinner95872862011-03-07 18:20:56 +01001062static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001063
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001065 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001066 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001067
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001068static int
Victor Stinner95872862011-03-07 18:20:56 +01001069init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001070{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001072
Victor Stinner95872862011-03-07 18:20:56 +01001073 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 for (p = PyImport_Inittab; p->name != NULL; p++) {
1077 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001078 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +01001079 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 if (p->initfunc == NULL) {
1081 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01001082 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 name);
1084 return -1;
1085 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 mod = (*p->initfunc)();
1087 if (mod == 0)
1088 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001089 /* Remember pointer to module init function. */
1090 def = PyModule_GetDef(mod);
1091 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +01001092 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 return -1;
1094 /* FixupExtension has put the module into sys.modules,
1095 so we can release our own reference. */
1096 Py_DECREF(mod);
1097 return 1;
1098 }
1099 }
1100 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001101}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001102
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001103
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001104/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001105
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001106static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01001107find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001110
Victor Stinner53dc7352011-03-20 01:50:21 +01001111 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00001113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 for (p = PyImport_FrozenModules; ; p++) {
1115 if (p->name == NULL)
1116 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001117 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 break;
1119 }
1120 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001121}
1122
Guido van Rossum79f25d91997-04-29 20:08:16 +00001123static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001124get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001125{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 struct _frozen *p = find_frozen(name);
1127 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 if (p == NULL) {
1130 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001131 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 name);
1133 return NULL;
1134 }
1135 if (p->code == NULL) {
1136 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001137 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 name);
1139 return NULL;
1140 }
1141 size = p->size;
1142 if (size < 0)
1143 size = -size;
1144 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001145}
1146
Brett Cannon8d110132009-03-15 02:20:16 +00001147static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001148is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001149{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 struct _frozen *p = find_frozen(name);
1151 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001153 if (p == NULL) {
1154 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001155 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 name);
1157 return NULL;
1158 }
Brett Cannon8d110132009-03-15 02:20:16 +00001159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001160 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001161
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 if (size < 0)
1163 Py_RETURN_TRUE;
1164 else
1165 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001166}
1167
1168
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001169/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001170 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001171 an exception set if the initialization failed.
1172 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001173
1174int
Victor Stinner53dc7352011-03-20 01:50:21 +01001175PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001176{
Victor Stinner53dc7352011-03-20 01:50:21 +01001177 struct _frozen *p;
1178 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 int ispackage;
1180 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001181
Victor Stinner53dc7352011-03-20 01:50:21 +01001182 p = find_frozen(name);
1183
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001184 if (p == NULL)
1185 return 0;
1186 if (p->code == NULL) {
1187 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001188 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 name);
1190 return -1;
1191 }
1192 size = p->size;
1193 ispackage = (size < 0);
1194 if (ispackage)
1195 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1197 if (co == NULL)
1198 return -1;
1199 if (!PyCode_Check(co)) {
1200 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001201 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 name);
1203 goto err_return;
1204 }
1205 if (ispackage) {
1206 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01001207 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001209 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 if (m == NULL)
1211 goto err_return;
1212 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 l = PyList_New(1);
1214 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 goto err_return;
1216 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001217 Py_INCREF(name);
1218 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 err = PyDict_SetItemString(d, "__path__", l);
1220 Py_DECREF(l);
1221 if (err != 0)
1222 goto err_return;
1223 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001224 path = PyUnicode_FromString("<frozen>");
1225 if (path == NULL)
1226 goto err_return;
1227 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
1228 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 if (m == NULL)
1230 goto err_return;
1231 Py_DECREF(co);
1232 Py_DECREF(m);
1233 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001234err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 Py_DECREF(co);
1236 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001237}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001238
Victor Stinner53dc7352011-03-20 01:50:21 +01001239int
1240PyImport_ImportFrozenModule(char *name)
1241{
1242 PyObject *nameobj;
1243 int ret;
1244 nameobj = PyUnicode_InternFromString(name);
1245 if (nameobj == NULL)
1246 return -1;
1247 ret = PyImport_ImportFrozenModuleObject(nameobj);
1248 Py_DECREF(nameobj);
1249 return ret;
1250}
1251
Guido van Rossum74e6a111994-08-29 12:54:38 +00001252
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001253/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001254 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001255
Guido van Rossum79f25d91997-04-29 20:08:16 +00001256PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001257PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001258{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 PyObject *pname;
1260 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 pname = PyUnicode_FromString(name);
1263 if (pname == NULL)
1264 return NULL;
1265 result = PyImport_Import(pname);
1266 Py_DECREF(pname);
1267 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001268}
1269
Christian Heimes072c0f12008-01-03 23:01:04 +00001270/* Import a module without blocking
1271 *
1272 * At first it tries to fetch the module from sys.modules. If the module was
1273 * never loaded before it loads it with PyImport_ImportModule() unless another
1274 * thread holds the import lock. In the latter case the function raises an
1275 * ImportError instead of blocking.
1276 *
1277 * Returns the module object with incremented ref count.
1278 */
1279PyObject *
1280PyImport_ImportModuleNoBlock(const char *name)
1281{
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001282 return PyImport_ImportModule(name);
Christian Heimes072c0f12008-01-03 23:01:04 +00001283}
1284
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001285
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001286/* Remove importlib frames from the traceback,
1287 * except in Verbose mode. */
1288static void
1289remove_importlib_frames(void)
1290{
1291 const char *importlib_filename = "<frozen importlib._bootstrap>";
1292 const char *exec_funcname = "_exec_module";
1293 int always_trim = 0;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001294 int in_importlib = 0;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001295 PyObject *exception, *value, *base_tb, *tb;
Benjamin Petersonfa873702012-07-09 13:43:53 -07001296 PyObject **prev_link, **outer_link = NULL;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001297
1298 /* Synopsis: if it's an ImportError, we trim all importlib chunks
1299 from the traceback. Otherwise, we trim only those chunks which
1300 end with a call to "_exec_module". */
1301
1302 PyErr_Fetch(&exception, &value, &base_tb);
1303 if (!exception || Py_VerboseFlag)
1304 goto done;
1305 if (PyType_IsSubtype((PyTypeObject *) exception,
1306 (PyTypeObject *) PyExc_ImportError))
1307 always_trim = 1;
1308
1309 prev_link = &base_tb;
1310 tb = base_tb;
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001311 while (tb != NULL) {
1312 PyTracebackObject *traceback = (PyTracebackObject *)tb;
1313 PyObject *next = (PyObject *) traceback->tb_next;
1314 PyFrameObject *frame = traceback->tb_frame;
1315 PyCodeObject *code = frame->f_code;
1316 int now_in_importlib;
1317
1318 assert(PyTraceBack_Check(tb));
1319 now_in_importlib = (PyUnicode_CompareWithASCIIString(
1320 code->co_filename,
1321 importlib_filename) == 0);
1322 if (now_in_importlib && !in_importlib) {
1323 /* This is the link to this chunk of importlib tracebacks */
1324 outer_link = prev_link;
1325 }
1326 in_importlib = now_in_importlib;
1327
1328 if (in_importlib &&
1329 (always_trim ||
1330 PyUnicode_CompareWithASCIIString(code->co_name,
1331 exec_funcname) == 0)) {
1332 PyObject *tmp = *outer_link;
1333 *outer_link = next;
1334 Py_XINCREF(next);
1335 Py_DECREF(tmp);
1336 prev_link = outer_link;
1337 }
1338 else {
1339 prev_link = (PyObject **) &traceback->tb_next;
1340 }
1341 tb = next;
1342 }
1343done:
1344 PyErr_Restore(exception, value, base_tb);
1345}
1346
1347
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001348PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04001349PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
1350 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001351 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001352{
Brett Cannonfd074152012-04-14 14:10:13 -04001353 _Py_IDENTIFIER(__import__);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001354 _Py_IDENTIFIER(__initializing__);
Brett Cannonfd074152012-04-14 14:10:13 -04001355 _Py_IDENTIFIER(__package__);
1356 _Py_IDENTIFIER(__path__);
1357 _Py_IDENTIFIER(__name__);
1358 _Py_IDENTIFIER(_find_and_load);
1359 _Py_IDENTIFIER(_handle_fromlist);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001360 _Py_IDENTIFIER(_lock_unlock_module);
Brett Cannonfd074152012-04-14 14:10:13 -04001361 _Py_static_string(single_dot, ".");
1362 PyObject *abs_name = NULL;
1363 PyObject *builtins_import = NULL;
1364 PyObject *final_mod = NULL;
1365 PyObject *mod = NULL;
1366 PyObject *package = NULL;
1367 PyObject *globals = NULL;
1368 PyObject *fromlist = NULL;
1369 PyInterpreterState *interp = PyThreadState_GET()->interp;
1370
1371 /* Make sure to use default values so as to not have
1372 PyObject_CallMethodObjArgs() truncate the parameter list because of a
1373 NULL argument. */
1374 if (given_globals == NULL) {
1375 globals = PyDict_New();
1376 if (globals == NULL) {
1377 goto error;
1378 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 }
Brett Cannonfd074152012-04-14 14:10:13 -04001380 else {
1381 /* Only have to care what given_globals is if it will be used
1382 fortsomething. */
1383 if (level > 0 && !PyDict_Check(given_globals)) {
1384 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1385 goto error;
1386 }
1387 globals = given_globals;
1388 Py_INCREF(globals);
1389 }
1390
1391 if (given_fromlist == NULL) {
1392 fromlist = PyList_New(0);
1393 if (fromlist == NULL) {
1394 goto error;
1395 }
1396 }
1397 else {
1398 fromlist = given_fromlist;
1399 Py_INCREF(fromlist);
1400 }
1401 if (name == NULL) {
1402 PyErr_SetString(PyExc_ValueError, "Empty module name");
1403 goto error;
1404 }
1405
1406 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1407 for added performance. */
1408
1409 if (!PyUnicode_Check(name)) {
1410 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1411 goto error;
1412 }
1413 else if (PyUnicode_READY(name) < 0) {
1414 goto error;
1415 }
1416 if (level < 0) {
1417 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1418 goto error;
1419 }
1420 else if (level > 0) {
1421 package = _PyDict_GetItemId(globals, &PyId___package__);
1422 if (package != NULL && package != Py_None) {
1423 Py_INCREF(package);
1424 if (!PyUnicode_Check(package)) {
1425 PyErr_SetString(PyExc_TypeError, "package must be a string");
1426 goto error;
1427 }
1428 }
1429 else {
Brett Cannon273323c2012-04-17 19:05:11 -04001430 package = _PyDict_GetItemId(globals, &PyId___name__);
Brett Cannonfd074152012-04-14 14:10:13 -04001431 if (package == NULL) {
Brett Cannon273323c2012-04-17 19:05:11 -04001432 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
Brett Cannonfd074152012-04-14 14:10:13 -04001433 goto error;
1434 }
1435 else if (!PyUnicode_Check(package)) {
1436 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1437 }
1438 Py_INCREF(package);
1439
1440 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04001441 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001442 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1443 if (borrowed_dot == NULL) {
1444 goto error;
1445 }
Brett Cannon740fce02012-04-14 14:23:49 -04001446 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001447 Py_DECREF(package);
1448 if (partition == NULL) {
1449 goto error;
1450 }
1451 package = PyTuple_GET_ITEM(partition, 0);
1452 Py_INCREF(package);
1453 Py_DECREF(partition);
1454 }
1455 }
1456
1457 if (PyDict_GetItem(interp->modules, package) == NULL) {
1458 PyErr_Format(PyExc_SystemError,
1459 "Parent module %R not loaded, cannot perform relative "
1460 "import", package);
1461 goto error;
1462 }
1463 }
1464 else { /* level == 0 */
1465 if (PyUnicode_GET_LENGTH(name) == 0) {
1466 PyErr_SetString(PyExc_ValueError, "Empty module name");
1467 goto error;
1468 }
1469 package = Py_None;
1470 Py_INCREF(package);
1471 }
1472
1473 if (level > 0) {
1474 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
1475 PyObject *base = NULL;
1476 int level_up = 1;
1477
1478 for (level_up = 1; level_up < level; level_up += 1) {
1479 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1480 if (last_dot == -2) {
1481 goto error;
1482 }
1483 else if (last_dot == -1) {
1484 PyErr_SetString(PyExc_ValueError,
1485 "attempted relative import beyond top-level "
1486 "package");
1487 goto error;
1488 }
1489 }
1490 base = PyUnicode_Substring(package, 0, last_dot);
1491 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001492 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001493
1494 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001495 seq = PyTuple_Pack(2, base, name);
1496 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04001497 if (borrowed_dot == NULL || seq == NULL) {
1498 goto error;
1499 }
1500
1501 abs_name = PyUnicode_Join(borrowed_dot, seq);
1502 Py_DECREF(seq);
1503 if (abs_name == NULL) {
1504 goto error;
1505 }
1506 }
1507 else {
1508 abs_name = base;
1509 }
1510 }
1511 else {
1512 abs_name = name;
1513 Py_INCREF(abs_name);
1514 }
1515
Brian Curtine6b299f2012-04-14 14:19:33 -05001516#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001517 _PyImport_AcquireLock();
1518#endif
1519 /* From this point forward, goto error_with_unlock! */
1520 if (PyDict_Check(globals)) {
1521 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
1522 }
1523 if (builtins_import == NULL) {
1524 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
1525 if (builtins_import == NULL) {
1526 Py_FatalError("__import__ missing");
1527 }
1528 }
1529 Py_INCREF(builtins_import);
1530
1531 mod = PyDict_GetItem(interp->modules, abs_name);
1532 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04001533 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
1534 "None in sys.modules", abs_name);
1535 if (msg != NULL) {
Brian Curtin09b86d12012-04-17 16:57:09 -05001536 PyErr_SetImportError(msg, abs_name, NULL);
1537 Py_DECREF(msg);
Brett Cannon27fc5282012-04-15 14:15:31 -04001538 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02001539 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001540 goto error_with_unlock;
1541 }
1542 else if (mod != NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001543 PyObject *value;
1544 int initializing = 0;
1545
Brett Cannonfd074152012-04-14 14:10:13 -04001546 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001547 /* Only call _bootstrap._lock_unlock_module() if __initializing__ is true. */
1548 value = _PyObject_GetAttrId(mod, &PyId___initializing__);
1549 if (value == NULL)
1550 PyErr_Clear();
1551 else {
1552 initializing = PyObject_IsTrue(value);
1553 Py_DECREF(value);
1554 if (initializing == -1)
1555 PyErr_Clear();
1556 }
1557 if (initializing > 0) {
1558 /* _bootstrap._lock_unlock_module() releases the import lock */
1559 value = _PyObject_CallMethodObjIdArgs(interp->importlib,
1560 &PyId__lock_unlock_module, abs_name,
1561 NULL);
1562 if (value == NULL)
1563 goto error;
1564 Py_DECREF(value);
1565 }
1566 else {
1567#ifdef WITH_THREAD
1568 if (_PyImport_ReleaseLock() < 0) {
1569 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1570 goto error;
1571 }
1572#endif
1573 }
Brett Cannonfd074152012-04-14 14:10:13 -04001574 }
1575 else {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001576 /* _bootstrap._find_and_load() releases the import lock */
Brett Cannonfd074152012-04-14 14:10:13 -04001577 mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1578 &PyId__find_and_load, abs_name,
1579 builtins_import, NULL);
1580 if (mod == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001581 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001582 }
1583 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001584 /* From now on we don't hold the import lock anymore. */
Brett Cannonfd074152012-04-14 14:10:13 -04001585
1586 if (PyObject_Not(fromlist)) {
1587 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
1588 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05001589 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001590 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1591
1592 if (borrowed_dot == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001593 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001594 }
1595
Brian Curtine6b299f2012-04-14 14:19:33 -05001596 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001597 if (partition == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001598 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001599 }
1600
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001601 if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) {
1602 /* No dot in module name, simple exit */
1603 Py_DECREF(partition);
1604 final_mod = mod;
1605 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001606 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001607 }
1608
Brett Cannonfd074152012-04-14 14:10:13 -04001609 front = PyTuple_GET_ITEM(partition, 0);
1610 Py_INCREF(front);
1611 Py_DECREF(partition);
1612
1613 if (level == 0) {
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001614 final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL);
Antoine Pitroub78174c2012-05-06 17:15:23 +02001615 Py_DECREF(front);
Brett Cannonfd074152012-04-14 14:10:13 -04001616 }
1617 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001618 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
1619 PyUnicode_GET_LENGTH(front);
1620 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001621 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001622 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001623 Py_DECREF(front);
1624 if (to_return == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001625 goto error;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001626 }
Brett Cannonfd074152012-04-14 14:10:13 -04001627
1628 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001629 if (final_mod == NULL) {
1630 PyErr_Format(PyExc_KeyError,
1631 "%R not in sys.modules as expected",
1632 to_return);
1633 }
1634 else {
1635 Py_INCREF(final_mod);
1636 }
Antoine Pitroub78174c2012-05-06 17:15:23 +02001637 Py_DECREF(to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04001638 }
1639 }
1640 else {
1641 final_mod = mod;
1642 Py_INCREF(mod);
1643 }
1644 }
1645 else {
1646 final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1647 &PyId__handle_fromlist, mod,
1648 fromlist, builtins_import,
1649 NULL);
1650 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001651 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001652
Brett Cannonfd074152012-04-14 14:10:13 -04001653 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05001654#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001655 if (_PyImport_ReleaseLock() < 0) {
1656 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1657 }
1658#endif
1659 error:
1660 Py_XDECREF(abs_name);
1661 Py_XDECREF(builtins_import);
1662 Py_XDECREF(mod);
1663 Py_XDECREF(package);
1664 Py_XDECREF(globals);
1665 Py_XDECREF(fromlist);
Antoine Pitroubc07a5c2012-07-08 12:01:27 +02001666 if (final_mod == NULL)
1667 remove_importlib_frames();
Brett Cannonfd074152012-04-14 14:10:13 -04001668 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001669}
1670
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001671PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001672PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001673 PyObject *fromlist, int level)
1674{
1675 PyObject *nameobj, *mod;
1676 nameobj = PyUnicode_FromString(name);
1677 if (nameobj == NULL)
1678 return NULL;
1679 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1680 fromlist, level);
1681 Py_DECREF(nameobj);
1682 return mod;
1683}
1684
1685
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001686/* Re-import a module of any kind and return its module object, WITH
1687 INCREMENTED REFERENCE COUNT */
1688
Guido van Rossum79f25d91997-04-29 20:08:16 +00001689PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001690PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001691{
Brett Cannon62228db2012-04-29 14:38:11 -04001692 _Py_IDENTIFIER(reload);
1693 PyObject *reloaded_module = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon62228db2012-04-29 14:38:11 -04001695 PyObject *imp = PyDict_GetItemString(modules, "imp");
1696 if (imp == NULL) {
1697 imp = PyImport_ImportModule("imp");
1698 if (imp == NULL) {
1699 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 }
Brett Cannon62228db2012-04-29 14:38:11 -04001702 else {
1703 Py_INCREF(imp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001704 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001705
Brett Cannon62228db2012-04-29 14:38:11 -04001706 reloaded_module = _PyObject_CallMethodId(imp, &PyId_reload, "O", m);
1707 Py_DECREF(imp);
1708 return reloaded_module;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001709}
1710
1711
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001712/* Higher-level import emulator which emulates the "import" statement
1713 more accurately -- it invokes the __import__() function from the
1714 builtins of the current globals. This means that the import is
1715 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001716 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001717 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001718 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001719 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001720
1721PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001722PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 static PyObject *silly_list = NULL;
1725 static PyObject *builtins_str = NULL;
1726 static PyObject *import_str = NULL;
1727 PyObject *globals = NULL;
1728 PyObject *import = NULL;
1729 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001730 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 /* Initialize constant string objects */
1734 if (silly_list == NULL) {
1735 import_str = PyUnicode_InternFromString("__import__");
1736 if (import_str == NULL)
1737 return NULL;
1738 builtins_str = PyUnicode_InternFromString("__builtins__");
1739 if (builtins_str == NULL)
1740 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001741 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001742 if (silly_list == NULL)
1743 return NULL;
1744 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 /* Get the builtins from current globals */
1747 globals = PyEval_GetGlobals();
1748 if (globals != NULL) {
1749 Py_INCREF(globals);
1750 builtins = PyObject_GetItem(globals, builtins_str);
1751 if (builtins == NULL)
1752 goto err;
1753 }
1754 else {
1755 /* No globals -- use standard builtins, and fake globals */
1756 builtins = PyImport_ImportModuleLevel("builtins",
1757 NULL, NULL, NULL, 0);
1758 if (builtins == NULL)
1759 return NULL;
1760 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1761 if (globals == NULL)
1762 goto err;
1763 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001765 /* Get the __import__ function from the builtins */
1766 if (PyDict_Check(builtins)) {
1767 import = PyObject_GetItem(builtins, import_str);
1768 if (import == NULL)
1769 PyErr_SetObject(PyExc_KeyError, import_str);
1770 }
1771 else
1772 import = PyObject_GetAttr(builtins, import_str);
1773 if (import == NULL)
1774 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001777 Always use absolute import here.
1778 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1780 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001781 if (r == NULL)
1782 goto err;
1783 Py_DECREF(r);
1784
1785 modules = PyImport_GetModuleDict();
1786 r = PyDict_GetItem(modules, module_name);
1787 if (r != NULL)
1788 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001789
1790 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001791 Py_XDECREF(globals);
1792 Py_XDECREF(builtins);
1793 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001795 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001796}
1797
Barry Warsaw28a691b2010-04-17 00:19:56 +00001798static PyObject *
Brett Cannon2657df42012-05-04 15:20:40 -04001799imp_extension_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 PyObject *list;
Brett Cannon2657df42012-05-04 15:20:40 -04001802 const char *suffix;
1803 unsigned int index = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 list = PyList_New(0);
1806 if (list == NULL)
1807 return NULL;
Brett Cannon2657df42012-05-04 15:20:40 -04001808#ifdef HAVE_DYNAMIC_LOADING
1809 while ((suffix = _PyImport_DynLoadFiletab[index])) {
1810 PyObject *item = PyUnicode_FromString(suffix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001811 if (item == NULL) {
1812 Py_DECREF(list);
1813 return NULL;
1814 }
1815 if (PyList_Append(list, item) < 0) {
1816 Py_DECREF(list);
1817 Py_DECREF(item);
1818 return NULL;
1819 }
1820 Py_DECREF(item);
Brett Cannon2657df42012-05-04 15:20:40 -04001821 index += 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 }
Brett Cannon2657df42012-05-04 15:20:40 -04001823#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001824 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825}
1826
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001828imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829{
Victor Stinner95872862011-03-07 18:20:56 +01001830 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001831 int ret;
1832 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01001833 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001834 return NULL;
1835 ret = init_builtin(name);
1836 if (ret < 0)
1837 return NULL;
1838 if (ret == 0) {
1839 Py_INCREF(Py_None);
1840 return Py_None;
1841 }
Victor Stinner95872862011-03-07 18:20:56 +01001842 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 Py_XINCREF(m);
1844 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001845}
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001848imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001849{
Victor Stinner53dc7352011-03-20 01:50:21 +01001850 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001851 int ret;
1852 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01001853 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001854 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001855 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001856 if (ret < 0)
1857 return NULL;
1858 if (ret == 0) {
1859 Py_INCREF(Py_None);
1860 return Py_None;
1861 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001862 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 Py_XINCREF(m);
1864 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001865}
1866
Guido van Rossum79f25d91997-04-29 20:08:16 +00001867static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001868imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001869{
Victor Stinner53dc7352011-03-20 01:50:21 +01001870 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001871
Victor Stinner53dc7352011-03-20 01:50:21 +01001872 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 return NULL;
1874 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001875}
1876
Guido van Rossum79f25d91997-04-29 20:08:16 +00001877static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00001878imp_is_frozen_package(PyObject *self, PyObject *args)
1879{
Victor Stinner53dc7352011-03-20 01:50:21 +01001880 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00001881
Victor Stinner53dc7352011-03-20 01:50:21 +01001882 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 return NULL;
1884 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00001885}
1886
1887static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001888imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001889{
Victor Stinner95872862011-03-07 18:20:56 +01001890 PyObject *name;
1891 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001892 return NULL;
1893 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001894}
1895
Guido van Rossum79f25d91997-04-29 20:08:16 +00001896static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001897imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001898{
Victor Stinner53dc7352011-03-20 01:50:21 +01001899 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001901 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 return NULL;
1903 p = find_frozen(name);
1904 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001905}
1906
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001907#ifdef HAVE_DYNAMIC_LOADING
1908
Guido van Rossum79f25d91997-04-29 20:08:16 +00001909static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001910imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001911{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001912 PyObject *name, *pathname, *fob = NULL, *mod;
1913 FILE *fp;
1914
1915 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
1916 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001918 if (fob != NULL) {
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001919 fp = _Py_fopen(pathname, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001920 if (fp == NULL) {
1921 Py_DECREF(pathname);
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001922 if (!PyErr_Occurred())
1923 PyErr_SetFromErrno(PyExc_IOError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001925 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001926 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001927 else
1928 fp = NULL;
1929 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001930 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 if (fp)
1932 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001933 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001934}
1935
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001936#endif /* HAVE_DYNAMIC_LOADING */
1937
Barry Warsaw28a691b2010-04-17 00:19:56 +00001938
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001939/* Doc strings */
1940
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001941PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04001942"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001943
Brett Cannon2657df42012-05-04 15:20:40 -04001944PyDoc_STRVAR(doc_extension_suffixes,
1945"extension_suffixes() -> list of strings\n\
1946Returns the list of file suffixes used to identify extension modules.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001947
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001948PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00001949"lock_held() -> boolean\n\
1950Return True if the import lock is currently held, else False.\n\
1951On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00001952
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001953PyDoc_STRVAR(doc_acquire_lock,
1954"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00001955Acquires the interpreter's import lock for the current thread.\n\
1956This lock should be used by import hooks to ensure thread-safety\n\
1957when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00001958On platforms without threads, this function does nothing.");
1959
1960PyDoc_STRVAR(doc_release_lock,
1961"release_lock() -> None\n\
1962Release the interpreter's import lock.\n\
1963On platforms without threads, this function does nothing.");
1964
Guido van Rossum79f25d91997-04-29 20:08:16 +00001965static PyMethodDef imp_methods[] = {
Brett Cannon2657df42012-05-04 15:20:40 -04001966 {"extension_suffixes", imp_extension_suffixes, METH_NOARGS,
1967 doc_extension_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
1969 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
1970 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
1972 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
1973 {"init_builtin", imp_init_builtin, METH_VARARGS},
1974 {"init_frozen", imp_init_frozen, METH_VARARGS},
1975 {"is_builtin", imp_is_builtin, METH_VARARGS},
1976 {"is_frozen", imp_is_frozen, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001977#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001979#endif
Brett Cannon442c9b92011-03-23 16:14:42 -07001980 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001982};
1983
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001984
Martin v. Löwis1a214512008-06-11 05:26:20 +00001985static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04001987 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 doc_imp,
1989 0,
1990 imp_methods,
1991 NULL,
1992 NULL,
1993 NULL,
1994 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00001995};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001996
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001997PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001998PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001999{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 m = PyModule_Create(&impmodule);
2003 if (m == NULL)
2004 goto failure;
2005 d = PyModule_GetDict(m);
2006 if (d == NULL)
2007 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002009 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002010 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 Py_XDECREF(m);
2012 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002013}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002014
2015
Guido van Rossumb18618d2000-05-03 23:44:39 +00002016/* API for embedding applications that want to add their own entries
2017 to the table of built-in modules. This should normally be called
2018 *before* Py_Initialize(). When the table resize fails, -1 is
2019 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002020
2021 After a similar function by Just van Rossum. */
2022
2023int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002024PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 static struct _inittab *our_copy = NULL;
2027 struct _inittab *p;
2028 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002030 /* Count the number of entries in both tables */
2031 for (n = 0; newtab[n].name != NULL; n++)
2032 ;
2033 if (n == 0)
2034 return 0; /* Nothing to do */
2035 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2036 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 /* Allocate new memory for the combined table */
2039 p = our_copy;
2040 PyMem_RESIZE(p, struct _inittab, i+n+1);
2041 if (p == NULL)
2042 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002043
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 /* Copy the tables into the new memory */
2045 if (our_copy != PyImport_Inittab)
2046 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2047 PyImport_Inittab = our_copy = p;
2048 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002049
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002050 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002051}
2052
2053/* Shorthand to add a single entry given a name and a function */
2054
2055int
Brett Cannona826f322009-04-02 03:41:46 +00002056PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 newtab[0].name = (char *)name;
2063 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002064
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002065 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002066}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002067
2068#ifdef __cplusplus
2069}
2070#endif