blob: 0580f608fb5a2d215326786fe613c455b7dd27ec [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"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000011#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000012#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013
Guido van Rossum55a83382000-09-20 20:31:38 +000014#ifdef HAVE_FCNTL_H
15#include <fcntl.h>
16#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017#ifdef __cplusplus
Brett Cannon9a5b25a2010-03-01 02:09:17 +000018extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000020
Christian Heimesd3eb5a152008-02-24 00:38:49 +000021#ifdef MS_WINDOWS
22/* for stat.st_mode */
23typedef unsigned short mode_t;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000024/* for _mkdir */
25#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000026#endif
27
Guido van Rossum21d335e1993-10-15 13:01:11 +000028
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000029/* Magic word to reject .pyc files generated by other Python versions.
30 It should change for each incompatible change to the bytecode.
31
32 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000033 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000034 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000035
Guido van Rossum45aecf42006-03-15 04:58:47 +000036 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000037 -U interpeter flag will cause MAGIC+1 being used. They have been
38 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000040 There were a variety of old schemes for setting the magic number.
41 The current working scheme is to increment the previous value by
42 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000043
Barry Warsaw28a691b2010-04-17 00:19:56 +000044 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
45 number also includes a new "magic tag", i.e. a human readable string used
46 to represent the magic number in __pycache__ directories. When you change
47 the magic number, you must also set a new unique magic tag. Generally this
48 can be named after the Python major version of the magic number bump, but
49 it can really be anything, as long as it's different than anything else
50 that's come before. The tags are included in the following table, starting
51 with Python 3.2a0.
52
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Known values:
54 Python 1.5: 20121
55 Python 1.5.1: 20121
56 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000057 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000058 Python 2.0: 50823
59 Python 2.0.1: 50823
60 Python 2.1: 60202
61 Python 2.1.1: 60202
62 Python 2.1.2: 60202
63 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000064 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000065 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000066 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000067 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000068 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000069 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000070 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000071 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000072 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000073 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000074 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
75 Python 2.5b3: 62111 (fix wrong code: x += yield)
76 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000078 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000079 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000080 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000081 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 3010 (removed UNARY_CONVERT)
83 3020 (added BUILD_SET)
84 3030 (added keyword-only parameters)
85 3040 (added signature annotations)
86 3050 (print becomes a function)
87 3060 (PEP 3115 metaclass syntax)
88 3061 (string literals become unicode)
89 3071 (PEP 3109 raise changes)
90 3081 (PEP 3137 make __file__ and __name__ unicode)
91 3091 (kill str8 interning)
92 3101 (merge from 2.6a0, see 62151)
93 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000094 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
95 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
96 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000099 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000100 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000102 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
103 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000104 Python 3.2a2 3180 (add DELETE_DEREF)
Benjamin Petersone7c15fa2011-06-19 19:54:45 -0500105 Python 3.3a0 3190 __class__ super closure changed
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100106 Python 3.3a0 3200 (__qualname__ added)
Benjamin Petersonabdb5522012-03-15 15:40:37 -0500107 3210 (added size modulo 2**32 to the pyc header)
108 Python 3.3a1 3220 (changed PEP 380 implementation)
Tim Peters36515e22001-11-18 04:06:29 +0000109*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000110
Nick Coghlancd419ab2010-09-11 00:39:25 +0000111/* MAGIC must change whenever the bytecode emitted by the compiler may no
112 longer be understood by older implementations of the eval loop (usually
113 due to the addition of new opcodes)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200114 TAG must change for each major Python release. The magic number will take
115 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000116*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500117#define QUOTE(arg) #arg
118#define STRIFY(name) QUOTE(name)
119#define MAJOR STRIFY(PY_MAJOR_VERSION)
120#define MINOR STRIFY(PY_MINOR_VERSION)
Benjamin Petersonf53d20f2012-03-16 09:39:12 -0500121#define MAGIC (3220 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500122#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000123#define CACHEDIR "__pycache__"
124/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000125static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000126static const char *pyc_tag = TAG;
Benjamin Peterson48deae12011-06-03 17:50:16 -0500127#undef QUOTE
128#undef STRIFY
129#undef MAJOR
130#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000131
Victor Stinner95872862011-03-07 18:20:56 +0100132/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000134
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200135/* Function from Parser/tokenizer.c */
136extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
137
Guido van Rossum771c6c81997-10-31 18:37:24 +0000138/* This table is defined in config.c: */
139extern struct _inittab _PyImport_Inittab[];
140
141struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000142
Guido van Rossumed1170e1999-12-20 21:23:41 +0000143/* these tables define the module suffixes that Python recognizes */
144struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000145
Guido van Rossumed1170e1999-12-20 21:23:41 +0000146static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000148#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000149 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000150#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 {".pyc", "rb", PY_COMPILED},
152 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000153};
154
Victor Stinnerd0296212011-03-14 14:04:10 -0400155static PyObject *initstr = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000156
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000157/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000158
159void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000160_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 const struct filedescr *scan;
163 struct filedescr *filetab;
164 int countD = 0;
165 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000166
Victor Stinnerd0296212011-03-14 14:04:10 -0400167 initstr = PyUnicode_InternFromString("__init__");
168 if (initstr == NULL)
169 Py_FatalError("Can't initialize import variables");
170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 /* prepare _PyImport_Filetab: copy entries from
172 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
173 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000174#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
176 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000177#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
179 ++countS;
180 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
181 if (filetab == NULL)
182 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000183#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 memcpy(filetab, _PyImport_DynLoadFiletab,
185 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000186#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 memcpy(filetab + countD, _PyImport_StandardFiletab,
188 countS * sizeof(struct filedescr));
189 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000193 if (Py_OptimizeFlag) {
194 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
195 for (; filetab->suffix != NULL; filetab++) {
196 if (strcmp(filetab->suffix, ".pyc") == 0)
197 filetab->suffix = ".pyo";
198 }
199 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000200}
201
Guido van Rossum25ce5661997-08-02 03:10:38 +0000202void
Just van Rossum52e14d62002-12-30 22:08:05 +0000203_PyImportHooks_Init(void)
204{
Brett Cannonfd074152012-04-14 14:10:13 -0400205 PyObject *v, *path_hooks = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000207
Brett Cannonfd074152012-04-14 14:10:13 -0400208 /* adding sys.path_hooks and sys.path_importer_cache */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000209 v = PyList_New(0);
210 if (v == NULL)
211 goto error;
212 err = PySys_SetObject("meta_path", v);
213 Py_DECREF(v);
214 if (err)
215 goto error;
216 v = PyDict_New();
217 if (v == NULL)
218 goto error;
219 err = PySys_SetObject("path_importer_cache", v);
220 Py_DECREF(v);
221 if (err)
222 goto error;
223 path_hooks = PyList_New(0);
224 if (path_hooks == NULL)
225 goto error;
226 err = PySys_SetObject("path_hooks", path_hooks);
227 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000228 error:
Brett Cannonfd074152012-04-14 14:10:13 -0400229 PyErr_Print();
230 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
Brett Cannonacf85cd2012-04-29 12:50:03 -0400231 "or path_importer_cache");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 }
Brett Cannonfd074152012-04-14 14:10:13 -0400233 Py_DECREF(path_hooks);
234}
235
236void
237_PyImportZip_Init(void)
238{
239 PyObject *path_hooks, *zimpimport;
240 int err = 0;
241
242 path_hooks = PySys_GetObject("path_hooks");
243 if (path_hooks == NULL)
244 goto error;
245
246 if (Py_VerboseFlag)
247 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000248
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000249 zimpimport = PyImport_ImportModule("zipimport");
250 if (zimpimport == NULL) {
251 PyErr_Clear(); /* No zip import module -- okay */
252 if (Py_VerboseFlag)
253 PySys_WriteStderr("# can't import zipimport\n");
254 }
255 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200256 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200257 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
258 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 Py_DECREF(zimpimport);
260 if (zipimporter == NULL) {
261 PyErr_Clear(); /* No zipimporter object -- okay */
262 if (Py_VerboseFlag)
263 PySys_WriteStderr(
264 "# can't import zipimport.zipimporter\n");
265 }
266 else {
Brett Cannon8923a4d2012-04-24 22:03:46 -0400267 /* sys.path_hooks.insert(0, zipimporter) */
268 err = PyList_Insert(path_hooks, 0, zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000269 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400270 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400272 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 if (Py_VerboseFlag)
274 PySys_WriteStderr(
275 "# installed zipimport hook\n");
276 }
277 }
Brett Cannonfd074152012-04-14 14:10:13 -0400278
279 return;
280
281 error:
282 PyErr_Print();
Brett Cannonacf85cd2012-04-29 12:50:03 -0400283 Py_FatalError("initializing zipimport failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000284}
285
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000286/* Locking primitives to prevent parallel imports of the same module
287 in different threads to return with a partially loaded module.
288 These calls are serialized by the global interpreter lock. */
289
290#ifdef WITH_THREAD
291
Guido van Rossum49b56061998-10-01 20:42:43 +0000292#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000293
Guido van Rossum65d5b571998-12-21 19:32:43 +0000294static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000295static long import_lock_thread = -1;
296static int import_lock_level = 0;
297
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000298void
299_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 long me = PyThread_get_thread_ident();
302 if (me == -1)
303 return; /* Too bad */
304 if (import_lock == NULL) {
305 import_lock = PyThread_allocate_lock();
306 if (import_lock == NULL)
307 return; /* Nothing much we can do. */
308 }
309 if (import_lock_thread == me) {
310 import_lock_level++;
311 return;
312 }
313 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
314 {
315 PyThreadState *tstate = PyEval_SaveThread();
316 PyThread_acquire_lock(import_lock, 1);
317 PyEval_RestoreThread(tstate);
318 }
319 import_lock_thread = me;
320 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000321}
322
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000323int
324_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000325{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 long me = PyThread_get_thread_ident();
327 if (me == -1 || import_lock == NULL)
328 return 0; /* Too bad */
329 if (import_lock_thread != me)
330 return -1;
331 import_lock_level--;
332 if (import_lock_level == 0) {
333 import_lock_thread = -1;
334 PyThread_release_lock(import_lock);
335 }
336 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000337}
338
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000339/* This function is called from PyOS_AfterFork to ensure that newly
340 created child processes do not share locks with the parent.
341 We now acquire the import lock around fork() calls but on some platforms
342 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000343
344void
345_PyImport_ReInitLock(void)
346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 if (import_lock != NULL)
348 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000349 if (import_lock_level > 1) {
350 /* Forked as a side effect of import */
351 long me = PyThread_get_thread_ident();
352 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100353 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000354 import_lock_thread = me;
355 import_lock_level--;
356 } else {
357 import_lock_thread = -1;
358 import_lock_level = 0;
359 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000360}
361
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000362#endif
363
Tim Peters69232342001-08-30 05:16:13 +0000364static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000365imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000366{
Tim Peters69232342001-08-30 05:16:13 +0000367#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000369#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000371#endif
372}
373
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000374static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000375imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000376{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000377#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000379#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 Py_INCREF(Py_None);
381 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000382}
383
384static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000385imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000386{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000387#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 if (_PyImport_ReleaseLock() < 0) {
389 PyErr_SetString(PyExc_RuntimeError,
390 "not holding the import lock");
391 return NULL;
392 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000393#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 Py_INCREF(Py_None);
395 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000396}
397
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100398void
399_PyImport_Fini(void)
400{
401 Py_XDECREF(extensions);
402 extensions = NULL;
403 PyMem_DEL(_PyImport_Filetab);
404 _PyImport_Filetab = NULL;
405#ifdef WITH_THREAD
406 if (import_lock != NULL) {
407 PyThread_free_lock(import_lock);
408 import_lock = NULL;
409 }
410#endif
411}
412
Guido van Rossumd8faa362007-04-27 19:54:29 +0000413static void
414imp_modules_reloading_clear(void)
415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 PyInterpreterState *interp = PyThreadState_Get()->interp;
417 if (interp->modules_reloading != NULL)
418 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000419}
420
Guido van Rossum25ce5661997-08-02 03:10:38 +0000421/* Helper for sys */
422
423PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000424PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000425{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 PyInterpreterState *interp = PyThreadState_GET()->interp;
427 if (interp->modules == NULL)
428 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
429 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000430}
431
Guido van Rossum3f5da241990-12-20 15:06:42 +0000432
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000433/* List of names to clear in sys */
434static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 "path", "argv", "ps1", "ps2",
436 "last_type", "last_value", "last_traceback",
437 "path_hooks", "path_importer_cache", "meta_path",
438 /* misc stuff */
439 "flags", "float_info",
440 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000441};
442
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000443static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000444 "stdin", "__stdin__",
445 "stdout", "__stdout__",
446 "stderr", "__stderr__",
447 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000448};
449
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000450
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000451/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000452
Guido van Rossum3f5da241990-12-20 15:06:42 +0000453void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000454PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000455{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000456 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 PyObject *key, *value, *dict;
458 PyInterpreterState *interp = PyThreadState_GET()->interp;
459 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000461 if (modules == NULL)
462 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 /* Delete some special variables first. These are common
465 places where user values hide and people complain when their
466 destructors fail. Since the modules containing them are
467 deleted *last* of all, they would come too late in the normal
468 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000470 value = PyDict_GetItemString(modules, "builtins");
471 if (value != NULL && PyModule_Check(value)) {
472 dict = PyModule_GetDict(value);
473 if (Py_VerboseFlag)
474 PySys_WriteStderr("# clear builtins._\n");
475 PyDict_SetItemString(dict, "_", Py_None);
476 }
477 value = PyDict_GetItemString(modules, "sys");
478 if (value != NULL && PyModule_Check(value)) {
479 char **p;
480 PyObject *v;
481 dict = PyModule_GetDict(value);
482 for (p = sys_deletes; *p != NULL; p++) {
483 if (Py_VerboseFlag)
484 PySys_WriteStderr("# clear sys.%s\n", *p);
485 PyDict_SetItemString(dict, *p, Py_None);
486 }
487 for (p = sys_files; *p != NULL; p+=2) {
488 if (Py_VerboseFlag)
489 PySys_WriteStderr("# restore sys.%s\n", *p);
490 v = PyDict_GetItemString(dict, *(p+1));
491 if (v == NULL)
492 v = Py_None;
493 PyDict_SetItemString(dict, *p, v);
494 }
495 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 /* First, delete __main__ */
498 value = PyDict_GetItemString(modules, "__main__");
499 if (value != NULL && PyModule_Check(value)) {
500 if (Py_VerboseFlag)
501 PySys_WriteStderr("# cleanup __main__\n");
502 _PyModule_Clear(value);
503 PyDict_SetItemString(modules, "__main__", Py_None);
504 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 /* The special treatment of "builtins" here is because even
507 when it's not referenced as a module, its dictionary is
508 referenced by almost every module's __builtins__. Since
509 deleting a module clears its dictionary (even if there are
510 references left to it), we need to delete the "builtins"
511 module last. Likewise, we don't delete sys until the very
512 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 Also note that we 'delete' modules by replacing their entry
515 in the modules dict with None, rather than really deleting
516 them; this avoids a rehash of the modules dictionary and
517 also marks them as "non existent" so they won't be
518 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 /* Next, repeatedly delete modules with a reference count of
521 one (skipping builtins and sys) and delete them */
522 do {
523 ndone = 0;
524 pos = 0;
525 while (PyDict_Next(modules, &pos, &key, &value)) {
526 if (value->ob_refcnt != 1)
527 continue;
528 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100529 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100531 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 continue;
533 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100534 PySys_FormatStderr(
535 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 _PyModule_Clear(value);
537 PyDict_SetItem(modules, key, Py_None);
538 ndone++;
539 }
540 }
541 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 /* Next, delete all modules (still skipping builtins and sys) */
544 pos = 0;
545 while (PyDict_Next(modules, &pos, &key, &value)) {
546 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100547 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100549 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 continue;
551 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100552 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 _PyModule_Clear(value);
554 PyDict_SetItem(modules, key, Py_None);
555 }
556 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 /* Next, delete sys and builtins (in that order) */
559 value = PyDict_GetItemString(modules, "sys");
560 if (value != NULL && PyModule_Check(value)) {
561 if (Py_VerboseFlag)
562 PySys_WriteStderr("# cleanup sys\n");
563 _PyModule_Clear(value);
564 PyDict_SetItemString(modules, "sys", Py_None);
565 }
566 value = PyDict_GetItemString(modules, "builtins");
567 if (value != NULL && PyModule_Check(value)) {
568 if (Py_VerboseFlag)
569 PySys_WriteStderr("# cleanup builtins\n");
570 _PyModule_Clear(value);
571 PyDict_SetItemString(modules, "builtins", Py_None);
572 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 /* Finally, clear and delete the modules directory */
575 PyDict_Clear(modules);
576 interp->modules = NULL;
577 Py_DECREF(modules);
578 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000579}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000580
581
Barry Warsaw28a691b2010-04-17 00:19:56 +0000582/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000583
584long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588}
589
590
Barry Warsaw28a691b2010-04-17 00:19:56 +0000591const char *
592PyImport_GetMagicTag(void)
593{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000595}
596
Guido van Rossum25ce5661997-08-02 03:10:38 +0000597/* Magic for extension modules (built-in as well as dynamically
598 loaded). To prevent initializing an extension module more than
599 once, we keep a static dictionary 'extensions' keyed by module name
600 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000601 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100602 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000603 immediately after the module initialization function succeeds. A
604 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100605 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000607 Modules which do support multiple initialization set their m_size
608 field to a non-negative number (indicating the size of the
609 module-specific state). They are still recorded in the extensions
610 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000611*/
612
613int
Victor Stinner95872862011-03-07 18:20:56 +0100614_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
615 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 PyObject *modules, *dict;
618 struct PyModuleDef *def;
619 if (extensions == NULL) {
620 extensions = PyDict_New();
621 if (extensions == NULL)
622 return -1;
623 }
624 if (mod == NULL || !PyModule_Check(mod)) {
625 PyErr_BadInternalCall();
626 return -1;
627 }
628 def = PyModule_GetDef(mod);
629 if (!def) {
630 PyErr_BadInternalCall();
631 return -1;
632 }
633 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100634 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 return -1;
636 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100637 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 return -1;
639 }
640 if (def->m_size == -1) {
641 if (def->m_base.m_copy) {
642 /* Somebody already imported the module,
643 likely under a different name.
644 XXX this should really not happen. */
645 Py_DECREF(def->m_base.m_copy);
646 def->m_base.m_copy = NULL;
647 }
648 dict = PyModule_GetDict(mod);
649 if (dict == NULL)
650 return -1;
651 def->m_base.m_copy = PyDict_Copy(dict);
652 if (def->m_base.m_copy == NULL)
653 return -1;
654 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000655 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000657}
658
Victor Stinner49d3f252010-10-17 01:24:53 +0000659int
660_PyImport_FixupBuiltin(PyObject *mod, char *name)
661{
662 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100663 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100664 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100665 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000666 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100667 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
668 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000669 return res;
670}
671
Guido van Rossum25ce5661997-08-02 03:10:38 +0000672PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100673_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000674{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000675 PyObject *mod, *mdict;
676 PyModuleDef* def;
677 if (extensions == NULL)
678 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000679 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 if (def == NULL)
681 return NULL;
682 if (def->m_size == -1) {
683 /* Module does not support repeated initialization */
684 if (def->m_base.m_copy == NULL)
685 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100686 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 if (mod == NULL)
688 return NULL;
689 mdict = PyModule_GetDict(mod);
690 if (mdict == NULL)
691 return NULL;
692 if (PyDict_Update(mdict, def->m_base.m_copy))
693 return NULL;
694 }
695 else {
696 if (def->m_base.m_init == NULL)
697 return NULL;
698 mod = def->m_base.m_init();
699 if (mod == NULL)
700 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100701 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 Py_DECREF(mod);
703 }
704 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100705 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 Py_DECREF(mod);
707 return NULL;
708 }
709 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100710 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 name, filename);
712 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000713
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000714}
715
Victor Stinner49d3f252010-10-17 01:24:53 +0000716PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000717_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000718{
Victor Stinner95872862011-03-07 18:20:56 +0100719 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100720 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100721 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000722 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100723 res = _PyImport_FindExtensionObject(nameobj, nameobj);
724 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000725 return res;
726}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000727
728/* Get the module object corresponding to a module name.
729 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000730 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000731 Because the former action is most common, THIS DOES NOT RETURN A
732 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000733
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000735PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyObject *modules = PyImport_GetModuleDict();
738 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739
Victor Stinner27ee0892011-03-04 12:57:09 +0000740 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 PyModule_Check(m))
742 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000743 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 if (m == NULL)
745 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000746 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 Py_DECREF(m);
748 return NULL;
749 }
750 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000753}
754
Victor Stinner27ee0892011-03-04 12:57:09 +0000755PyObject *
756PyImport_AddModule(const char *name)
757{
758 PyObject *nameobj, *module;
759 nameobj = PyUnicode_FromString(name);
760 if (nameobj == NULL)
761 return NULL;
762 module = PyImport_AddModuleObject(nameobj);
763 Py_DECREF(nameobj);
764 return module;
765}
766
767
Tim Peters1cd70172004-08-02 03:52:12 +0000768/* Remove name from sys.modules, if it's there. */
769static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000770remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000771{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000773 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000775 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 Py_FatalError("import: deleting existing key in"
777 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000778}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779
Victor Stinnerc9abda02011-03-14 13:33:46 -0400780static PyObject * get_sourcefile(PyObject *filename);
781static PyObject *make_source_pathname(PyObject *pathname);
Christian Heimes3b06e532008-01-07 20:12:44 +0000782
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000783/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000784 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
785 * removed from sys.modules, to avoid leaving damaged module objects
786 * in sys.modules. The caller may wish to restore the original
787 * module object (if any) in this case; PyImport_ReloadModule is an
788 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000789 *
790 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
791 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000792 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000793PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000794PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000795{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 return PyImport_ExecCodeModuleWithPathnames(
797 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000798}
799
800PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000801PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000802{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000803 return PyImport_ExecCodeModuleWithPathnames(
804 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000805}
806
807PyObject *
808PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000810{
Victor Stinner27ee0892011-03-04 12:57:09 +0000811 PyObject *m = NULL;
812 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
813
814 nameobj = PyUnicode_FromString(name);
815 if (nameobj == NULL)
816 return NULL;
817
818 if (pathname != NULL) {
819 pathobj = PyUnicode_DecodeFSDefault(pathname);
820 if (pathobj == NULL)
821 goto error;
822 } else
823 pathobj = NULL;
824 if (cpathname != NULL) {
825 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
826 if (cpathobj == NULL)
827 goto error;
828 } else
829 cpathobj = NULL;
830 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
831error:
832 Py_DECREF(nameobj);
833 Py_XDECREF(pathobj);
834 Py_XDECREF(cpathobj);
835 return m;
836}
837
838PyObject*
839PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
840 PyObject *cpathname)
841{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 PyObject *modules = PyImport_GetModuleDict();
843 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000844
Victor Stinner27ee0892011-03-04 12:57:09 +0000845 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 if (m == NULL)
847 return NULL;
848 /* If the module is being reloaded, we get the old module back
849 and re-use its dict to exec the new code. */
850 d = PyModule_GetDict(m);
851 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
852 if (PyDict_SetItemString(d, "__builtins__",
853 PyEval_GetBuiltins()) != 0)
854 goto error;
855 }
856 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400858 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 if (v == NULL)
860 PyErr_Clear();
861 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000862 else
863 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 if (v == NULL) {
865 v = ((PyCodeObject *)co)->co_filename;
866 Py_INCREF(v);
867 }
868 if (PyDict_SetItemString(d, "__file__", v) != 0)
869 PyErr_Clear(); /* Not important enough to report */
870 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000871
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000873 if (cpathname != NULL)
874 v = cpathname;
875 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 if (PyDict_SetItemString(d, "__cached__", v) != 0)
878 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000879
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000880 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 if (v == NULL)
882 goto error;
883 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000884
Victor Stinner27ee0892011-03-04 12:57:09 +0000885 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000887 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 name);
889 return NULL;
890 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000895
896 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 remove_module(name);
898 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899}
900
901
Martin v. Löwis2db72862011-10-23 17:29:08 +0200902/* Like rightmost_sep, but operate on unicode objects. */
903static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200904rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200905{
906 Py_ssize_t found, i;
907 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200908 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200909 c = PyUnicode_READ_CHAR(o, i);
910 if (c == SEP
911#ifdef ALTSEP
912 || c == ALTSEP
913#endif
914 )
915 {
916 found = i;
917 }
918 }
919 return found;
920}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400921
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000922
Barry Warsaw28a691b2010-04-17 00:19:56 +0000923/* Given a pathname to a Python byte compiled file, return the path to the
924 source file, if the path matches the PEP 3147 format. This does not check
925 for any file existence, however, if the pyc file name does not match PEP
926 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400927 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928
Victor Stinnerc9abda02011-03-14 13:33:46 -0400929 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
930
931static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200932make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000933{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200934 Py_ssize_t left, right, dot0, dot1, len;
935 Py_ssize_t i, j;
936 PyObject *result;
937 int kind;
938 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400939
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200940 len = PyUnicode_GET_LENGTH(path);
941 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200942 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 /* Look back two slashes from the end. In between these two slashes
945 must be the string __pycache__ or this is not a PEP 3147 style
946 path. It's possible for there to be only one slash.
947 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200948 right = rightmost_sep_obj(path, 0, len);
949 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200951 left = rightmost_sep_obj(path, 0, right);
952 if (left == -1)
953 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000954 else
955 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200956 if (right-left != sizeof(CACHEDIR)-1)
957 return NULL;
958 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
959 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
960 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 /* Now verify that the path component to the right of the last slash
963 has two dots in it.
964 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200965 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
966 if (dot0 < 0)
967 return NULL;
968 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
969 if (dot1 < 0)
970 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200972 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
973 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 /* This is a PEP 3147 path. Start by copying everything from the
976 start of pathname up to and including the leftmost slash. Then
977 copy the file's basename, removing the magic tag and adding a .py
978 suffix.
979 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200980 result = PyUnicode_New(left + (dot0-right) + 2,
981 PyUnicode_MAX_CHAR_VALUE(path));
982 if (!result)
983 return NULL;
984 kind = PyUnicode_KIND(result);
985 data = PyUnicode_DATA(result);
986 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
987 PyUnicode_CopyCharacters(result, left, path, right+1,
988 (j = dot0-right));
989 PyUnicode_WRITE(kind, data, i+j, 'p');
990 PyUnicode_WRITE(kind, data, i+j+1, 'y');
Victor Stinner8f825062012-04-27 13:55:39 +0200991 assert(_PyUnicode_CheckConsistency(result, 1));
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200992 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000993}
994
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000996static void
997update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
998{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 PyObject *constants, *tmp;
1000 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 if (PyUnicode_Compare(co->co_filename, oldname))
1003 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001004
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 tmp = co->co_filename;
1006 co->co_filename = newname;
1007 Py_INCREF(co->co_filename);
1008 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 constants = co->co_consts;
1011 n = PyTuple_GET_SIZE(constants);
1012 for (i = 0; i < n; i++) {
1013 tmp = PyTuple_GET_ITEM(constants, i);
1014 if (PyCode_Check(tmp))
1015 update_code_filenames((PyCodeObject *)tmp,
1016 oldname, newname);
1017 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001018}
1019
Victor Stinner2f42ae52011-03-20 00:41:24 +01001020static void
1021update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001022{
Victor Stinner2f42ae52011-03-20 00:41:24 +01001023 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001024
Victor Stinner2f42ae52011-03-20 00:41:24 +01001025 if (PyUnicode_Compare(co->co_filename, newname) == 0)
1026 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 oldname = co->co_filename;
1029 Py_INCREF(oldname);
1030 update_code_filenames(co, oldname, newname);
1031 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001032}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001033
Brett Cannon442c9b92011-03-23 16:14:42 -07001034static PyObject *
1035imp_fix_co_filename(PyObject *self, PyObject *args)
1036{
1037 PyObject *co;
1038 PyObject *file_path;
1039
1040 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
1041 return NULL;
1042
1043 if (!PyCode_Check(co)) {
1044 PyErr_SetString(PyExc_TypeError,
1045 "first argument must be a code object");
1046 return NULL;
1047 }
1048
1049 if (!PyUnicode_Check(file_path)) {
1050 PyErr_SetString(PyExc_TypeError,
1051 "second argument must be a string");
1052 return NULL;
1053 }
1054
1055 update_compiled_module((PyCodeObject*)co, file_path);
1056
1057 Py_RETURN_NONE;
1058}
1059
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060
Christian Heimes3b06e532008-01-07 20:12:44 +00001061/* Get source file -> unicode or None
1062 * Returns the path to the py file if available, else the given path
1063 */
1064static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001065get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 Py_ssize_t len;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001068 Py_UCS4 *fileuni;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001069 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 struct stat statbuf;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001071 int err;
Christian Heimes3b06e532008-01-07 20:12:44 +00001072
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001073 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001074 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001076
Victor Stinnerc9abda02011-03-14 13:33:46 -04001077 /* don't match *.pyc or *.pyo? */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001078 fileuni = PyUnicode_AsUCS4Copy(filename);
1079 if (!fileuni)
1080 return NULL;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001081 if (len < 5
1082 || fileuni[len-4] != '.'
1083 || (fileuni[len-3] != 'p' && fileuni[len-3] != 'P')
1084 || (fileuni[len-2] != 'y' && fileuni[len-2] != 'Y'))
1085 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 /* Start by trying to turn PEP 3147 path into source path. If that
1088 * fails, just chop off the trailing character, i.e. legacy pyc path
1089 * to py.
1090 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001091 py = make_source_pathname(filename);
1092 if (py == NULL) {
1093 PyErr_Clear();
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001094 py = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, fileuni, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001096 if (py == NULL)
1097 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001098
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001099 err = _Py_stat(py, &statbuf);
1100 if (err == -2)
1101 goto error;
1102 if (err == 0 && S_ISREG(statbuf.st_mode)) {
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001103 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001104 return py;
Martin v. Löwis0b1d3482011-10-01 16:35:40 +02001105 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001106 Py_DECREF(py);
1107 goto unchanged;
1108
1109error:
1110 PyErr_Clear();
1111unchanged:
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001112 PyMem_Free(fileuni);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001113 Py_INCREF(filename);
1114 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001115}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001116
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001117/* Forward */
Victor Stinner53dc7352011-03-20 01:50:21 +01001118static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001119
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001120
1121/* Helper to test for built-in module */
1122
1123static int
Victor Stinner95872862011-03-07 18:20:56 +01001124is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001125{
Victor Stinner95872862011-03-07 18:20:56 +01001126 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001128 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1129 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001130 if (PyImport_Inittab[i].initfunc == NULL)
1131 return -1;
1132 else
1133 return 1;
1134 }
1135 }
1136 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001137}
1138
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001139
Just van Rossum52e14d62002-12-30 22:08:05 +00001140/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1141 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001142 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001143 that can handle the path item. Return None if no hook could;
1144 this tells our caller it should fall back to the builtin
1145 import mechanism. Cache the result in path_importer_cache.
1146 Returns a borrowed reference. */
1147
1148static PyObject *
1149get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 PyObject *importer;
1153 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 /* These conditions are the caller's responsibility: */
1156 assert(PyList_Check(path_hooks));
1157 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 nhooks = PyList_Size(path_hooks);
1160 if (nhooks < 0)
1161 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 importer = PyDict_GetItem(path_importer_cache, p);
1164 if (importer != NULL)
1165 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 /* set path_importer_cache[p] to None to avoid recursion */
1168 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1169 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 for (j = 0; j < nhooks; j++) {
1172 PyObject *hook = PyList_GetItem(path_hooks, j);
1173 if (hook == NULL)
1174 return NULL;
1175 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1176 if (importer != NULL)
1177 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1180 return NULL;
1181 }
1182 PyErr_Clear();
1183 }
1184 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -04001185 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001186 }
1187 if (importer != NULL) {
1188 int err = PyDict_SetItem(path_importer_cache, p, importer);
1189 Py_DECREF(importer);
1190 if (err != 0)
1191 return NULL;
1192 }
1193 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001194}
1195
Christian Heimes9cd17752007-11-18 19:35:23 +00001196PyAPI_FUNC(PyObject *)
1197PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1201 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1202 importer = get_path_importer(path_importer_cache,
1203 path_hooks, path);
1204 }
1205 }
1206 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1207 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001208}
1209
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001211#ifdef MS_COREDLL
Victor Stinner4d6c1c42011-03-08 23:49:04 +01001212extern FILE *_PyWin_FindRegisteredModule(PyObject *, struct filedescr **,
1213 PyObject **p_path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001214#endif
1215
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216
Victor Stinner95872862011-03-07 18:20:56 +01001217static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001218
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001219/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001220 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001221 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001222
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001223static int
Victor Stinner95872862011-03-07 18:20:56 +01001224init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001225{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001227
Victor Stinner95872862011-03-07 18:20:56 +01001228 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 for (p = PyImport_Inittab; p->name != NULL; p++) {
1232 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001233 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +01001234 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 if (p->initfunc == NULL) {
1236 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01001237 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 name);
1239 return -1;
1240 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001241 mod = (*p->initfunc)();
1242 if (mod == 0)
1243 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001244 /* Remember pointer to module init function. */
1245 def = PyModule_GetDef(mod);
1246 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +01001247 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 return -1;
1249 /* FixupExtension has put the module into sys.modules,
1250 so we can release our own reference. */
1251 Py_DECREF(mod);
1252 return 1;
1253 }
1254 }
1255 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001256}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001257
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001258
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001259/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001260
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001261static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01001262find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001263{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001265
Victor Stinner53dc7352011-03-20 01:50:21 +01001266 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00001268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 for (p = PyImport_FrozenModules; ; p++) {
1270 if (p->name == NULL)
1271 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001272 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 break;
1274 }
1275 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001276}
1277
Guido van Rossum79f25d91997-04-29 20:08:16 +00001278static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001279get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001280{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001281 struct _frozen *p = find_frozen(name);
1282 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001284 if (p == NULL) {
1285 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001286 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 name);
1288 return NULL;
1289 }
1290 if (p->code == NULL) {
1291 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001292 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 name);
1294 return NULL;
1295 }
1296 size = p->size;
1297 if (size < 0)
1298 size = -size;
1299 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001300}
1301
Brett Cannon8d110132009-03-15 02:20:16 +00001302static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001303is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 struct _frozen *p = find_frozen(name);
1306 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001307
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 if (p == NULL) {
1309 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001310 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 name);
1312 return NULL;
1313 }
Brett Cannon8d110132009-03-15 02:20:16 +00001314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001317 if (size < 0)
1318 Py_RETURN_TRUE;
1319 else
1320 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001321}
1322
1323
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001324/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001325 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001326 an exception set if the initialization failed.
1327 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001328
1329int
Victor Stinner53dc7352011-03-20 01:50:21 +01001330PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001331{
Victor Stinner53dc7352011-03-20 01:50:21 +01001332 struct _frozen *p;
1333 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001334 int ispackage;
1335 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001336
Victor Stinner53dc7352011-03-20 01:50:21 +01001337 p = find_frozen(name);
1338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 if (p == NULL)
1340 return 0;
1341 if (p->code == NULL) {
1342 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001343 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001344 name);
1345 return -1;
1346 }
1347 size = p->size;
1348 ispackage = (size < 0);
1349 if (ispackage)
1350 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1352 if (co == NULL)
1353 return -1;
1354 if (!PyCode_Check(co)) {
1355 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001356 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 name);
1358 goto err_return;
1359 }
1360 if (ispackage) {
1361 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01001362 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001363 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001364 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 if (m == NULL)
1366 goto err_return;
1367 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001368 l = PyList_New(1);
1369 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001370 goto err_return;
1371 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001372 Py_INCREF(name);
1373 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 err = PyDict_SetItemString(d, "__path__", l);
1375 Py_DECREF(l);
1376 if (err != 0)
1377 goto err_return;
1378 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001379 path = PyUnicode_FromString("<frozen>");
1380 if (path == NULL)
1381 goto err_return;
1382 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
1383 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 if (m == NULL)
1385 goto err_return;
1386 Py_DECREF(co);
1387 Py_DECREF(m);
1388 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001389err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 Py_DECREF(co);
1391 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001392}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001393
Victor Stinner53dc7352011-03-20 01:50:21 +01001394int
1395PyImport_ImportFrozenModule(char *name)
1396{
1397 PyObject *nameobj;
1398 int ret;
1399 nameobj = PyUnicode_InternFromString(name);
1400 if (nameobj == NULL)
1401 return -1;
1402 ret = PyImport_ImportFrozenModuleObject(nameobj);
1403 Py_DECREF(nameobj);
1404 return ret;
1405}
1406
Guido van Rossum74e6a111994-08-29 12:54:38 +00001407
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001408/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001409 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001410
Guido van Rossum79f25d91997-04-29 20:08:16 +00001411PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001412PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001413{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 PyObject *pname;
1415 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001417 pname = PyUnicode_FromString(name);
1418 if (pname == NULL)
1419 return NULL;
1420 result = PyImport_Import(pname);
1421 Py_DECREF(pname);
1422 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001423}
1424
Christian Heimes072c0f12008-01-03 23:01:04 +00001425/* Import a module without blocking
1426 *
1427 * At first it tries to fetch the module from sys.modules. If the module was
1428 * never loaded before it loads it with PyImport_ImportModule() unless another
1429 * thread holds the import lock. In the latter case the function raises an
1430 * ImportError instead of blocking.
1431 *
1432 * Returns the module object with incremented ref count.
1433 */
1434PyObject *
1435PyImport_ImportModuleNoBlock(const char *name)
1436{
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001437 PyObject *nameobj, *modules, *result;
Victor Stinner0af03062011-09-02 00:11:43 +02001438#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001439 long me;
Victor Stinner0af03062011-09-02 00:11:43 +02001440#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00001441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 /* Try to get the module from sys.modules[name] */
1443 modules = PyImport_GetModuleDict();
1444 if (modules == NULL)
1445 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00001446
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001447 nameobj = PyUnicode_FromString(name);
1448 if (nameobj == NULL)
1449 return NULL;
1450 result = PyDict_GetItem(modules, nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 if (result != NULL) {
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001452 Py_DECREF(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 Py_INCREF(result);
1454 return result;
1455 }
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001456 PyErr_Clear();
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00001457#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 /* check the import lock
1459 * me might be -1 but I ignore the error here, the lock function
1460 * takes care of the problem */
1461 me = PyThread_get_thread_ident();
1462 if (import_lock_thread == -1 || import_lock_thread == me) {
1463 /* no thread or me is holding the lock */
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001464 result = PyImport_Import(nameobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001465 }
1466 else {
1467 PyErr_Format(PyExc_ImportError,
Victor Stinnerc24c8102011-03-13 22:38:06 -04001468 "Failed to import %R because the import lock"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 "is held by another thread.",
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001470 nameobj);
1471 result = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001472 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00001473#else
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001474 result = PyImport_Import(nameobj);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00001475#endif
Victor Stinner2e5f11a2011-03-13 21:57:27 -04001476 Py_DECREF(nameobj);
1477 return result;
Christian Heimes072c0f12008-01-03 23:01:04 +00001478}
1479
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001480
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001481PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04001482PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
1483 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001484 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001485{
Brett Cannonfd074152012-04-14 14:10:13 -04001486 _Py_IDENTIFIER(__import__);
1487 _Py_IDENTIFIER(__package__);
1488 _Py_IDENTIFIER(__path__);
1489 _Py_IDENTIFIER(__name__);
1490 _Py_IDENTIFIER(_find_and_load);
1491 _Py_IDENTIFIER(_handle_fromlist);
1492 _Py_static_string(single_dot, ".");
1493 PyObject *abs_name = NULL;
1494 PyObject *builtins_import = NULL;
1495 PyObject *final_mod = NULL;
1496 PyObject *mod = NULL;
1497 PyObject *package = NULL;
1498 PyObject *globals = NULL;
1499 PyObject *fromlist = NULL;
1500 PyInterpreterState *interp = PyThreadState_GET()->interp;
1501
1502 /* Make sure to use default values so as to not have
1503 PyObject_CallMethodObjArgs() truncate the parameter list because of a
1504 NULL argument. */
1505 if (given_globals == NULL) {
1506 globals = PyDict_New();
1507 if (globals == NULL) {
1508 goto error;
1509 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001510 }
Brett Cannonfd074152012-04-14 14:10:13 -04001511 else {
1512 /* Only have to care what given_globals is if it will be used
1513 fortsomething. */
1514 if (level > 0 && !PyDict_Check(given_globals)) {
1515 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1516 goto error;
1517 }
1518 globals = given_globals;
1519 Py_INCREF(globals);
1520 }
1521
1522 if (given_fromlist == NULL) {
1523 fromlist = PyList_New(0);
1524 if (fromlist == NULL) {
1525 goto error;
1526 }
1527 }
1528 else {
1529 fromlist = given_fromlist;
1530 Py_INCREF(fromlist);
1531 }
1532 if (name == NULL) {
1533 PyErr_SetString(PyExc_ValueError, "Empty module name");
1534 goto error;
1535 }
1536
1537 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1538 for added performance. */
1539
1540 if (!PyUnicode_Check(name)) {
1541 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1542 goto error;
1543 }
1544 else if (PyUnicode_READY(name) < 0) {
1545 goto error;
1546 }
1547 if (level < 0) {
1548 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1549 goto error;
1550 }
1551 else if (level > 0) {
1552 package = _PyDict_GetItemId(globals, &PyId___package__);
1553 if (package != NULL && package != Py_None) {
1554 Py_INCREF(package);
1555 if (!PyUnicode_Check(package)) {
1556 PyErr_SetString(PyExc_TypeError, "package must be a string");
1557 goto error;
1558 }
1559 }
1560 else {
Brett Cannon273323c2012-04-17 19:05:11 -04001561 package = _PyDict_GetItemId(globals, &PyId___name__);
Brett Cannonfd074152012-04-14 14:10:13 -04001562 if (package == NULL) {
Brett Cannon273323c2012-04-17 19:05:11 -04001563 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
Brett Cannonfd074152012-04-14 14:10:13 -04001564 goto error;
1565 }
1566 else if (!PyUnicode_Check(package)) {
1567 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1568 }
1569 Py_INCREF(package);
1570
1571 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04001572 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001573 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1574 if (borrowed_dot == NULL) {
1575 goto error;
1576 }
Brett Cannon740fce02012-04-14 14:23:49 -04001577 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001578 Py_DECREF(package);
1579 if (partition == NULL) {
1580 goto error;
1581 }
1582 package = PyTuple_GET_ITEM(partition, 0);
1583 Py_INCREF(package);
1584 Py_DECREF(partition);
1585 }
1586 }
1587
1588 if (PyDict_GetItem(interp->modules, package) == NULL) {
1589 PyErr_Format(PyExc_SystemError,
1590 "Parent module %R not loaded, cannot perform relative "
1591 "import", package);
1592 goto error;
1593 }
1594 }
1595 else { /* level == 0 */
1596 if (PyUnicode_GET_LENGTH(name) == 0) {
1597 PyErr_SetString(PyExc_ValueError, "Empty module name");
1598 goto error;
1599 }
1600 package = Py_None;
1601 Py_INCREF(package);
1602 }
1603
1604 if (level > 0) {
1605 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
1606 PyObject *base = NULL;
1607 int level_up = 1;
1608
1609 for (level_up = 1; level_up < level; level_up += 1) {
1610 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1611 if (last_dot == -2) {
1612 goto error;
1613 }
1614 else if (last_dot == -1) {
1615 PyErr_SetString(PyExc_ValueError,
1616 "attempted relative import beyond top-level "
1617 "package");
1618 goto error;
1619 }
1620 }
1621 base = PyUnicode_Substring(package, 0, last_dot);
1622 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001623 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001624
1625 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001626 seq = PyTuple_Pack(2, base, name);
1627 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04001628 if (borrowed_dot == NULL || seq == NULL) {
1629 goto error;
1630 }
1631
1632 abs_name = PyUnicode_Join(borrowed_dot, seq);
1633 Py_DECREF(seq);
1634 if (abs_name == NULL) {
1635 goto error;
1636 }
1637 }
1638 else {
1639 abs_name = base;
1640 }
1641 }
1642 else {
1643 abs_name = name;
1644 Py_INCREF(abs_name);
1645 }
1646
Brian Curtine6b299f2012-04-14 14:19:33 -05001647#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001648 _PyImport_AcquireLock();
1649#endif
1650 /* From this point forward, goto error_with_unlock! */
1651 if (PyDict_Check(globals)) {
1652 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
1653 }
1654 if (builtins_import == NULL) {
1655 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
1656 if (builtins_import == NULL) {
1657 Py_FatalError("__import__ missing");
1658 }
1659 }
1660 Py_INCREF(builtins_import);
1661
1662 mod = PyDict_GetItem(interp->modules, abs_name);
1663 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04001664 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
1665 "None in sys.modules", abs_name);
1666 if (msg != NULL) {
Brian Curtin09b86d12012-04-17 16:57:09 -05001667 PyErr_SetImportError(msg, abs_name, NULL);
1668 Py_DECREF(msg);
Brett Cannon27fc5282012-04-15 14:15:31 -04001669 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02001670 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001671 goto error_with_unlock;
1672 }
1673 else if (mod != NULL) {
1674 Py_INCREF(mod);
1675 }
1676 else {
1677 mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1678 &PyId__find_and_load, abs_name,
1679 builtins_import, NULL);
1680 if (mod == NULL) {
1681 goto error_with_unlock;
1682 }
1683 }
1684
1685 if (PyObject_Not(fromlist)) {
1686 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
1687 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05001688 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001689 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1690
1691 if (borrowed_dot == NULL) {
1692 goto error_with_unlock;
1693 }
1694
Brian Curtine6b299f2012-04-14 14:19:33 -05001695 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001696 if (partition == NULL) {
1697 goto error_with_unlock;
1698 }
1699
1700 front = PyTuple_GET_ITEM(partition, 0);
1701 Py_INCREF(front);
1702 Py_DECREF(partition);
1703
1704 if (level == 0) {
Benjamin Petersond76bc7a2012-04-18 10:55:43 -04001705 final_mod = PyDict_GetItem(interp->modules, front);
Brett Cannon881535b2012-04-15 15:24:04 -04001706 Py_DECREF(front);
1707 if (final_mod == NULL) {
Benjamin Petersond76bc7a2012-04-18 10:55:43 -04001708 PyErr_Format(PyExc_KeyError,
1709 "%R not in sys.modules as expected", front);
Brett Cannon881535b2012-04-15 15:24:04 -04001710 }
Benjamin Petersond76bc7a2012-04-18 10:55:43 -04001711 else {
1712 Py_INCREF(final_mod);
1713 }
Brett Cannonfd074152012-04-14 14:10:13 -04001714 }
1715 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001716 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
1717 PyUnicode_GET_LENGTH(front);
1718 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001719 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001720 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001721 Py_DECREF(front);
1722 if (to_return == NULL) {
1723 goto error_with_unlock;
1724 }
Brett Cannonfd074152012-04-14 14:10:13 -04001725
1726 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04001727 Py_DECREF(to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001728 if (final_mod == NULL) {
1729 PyErr_Format(PyExc_KeyError,
1730 "%R not in sys.modules as expected",
1731 to_return);
1732 }
1733 else {
1734 Py_INCREF(final_mod);
1735 }
Brett Cannonfd074152012-04-14 14:10:13 -04001736 }
1737 }
1738 else {
1739 final_mod = mod;
1740 Py_INCREF(mod);
1741 }
1742 }
1743 else {
1744 final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1745 &PyId__handle_fromlist, mod,
1746 fromlist, builtins_import,
1747 NULL);
1748 }
1749 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05001750#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001751 if (_PyImport_ReleaseLock() < 0) {
1752 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1753 }
1754#endif
1755 error:
1756 Py_XDECREF(abs_name);
1757 Py_XDECREF(builtins_import);
1758 Py_XDECREF(mod);
1759 Py_XDECREF(package);
1760 Py_XDECREF(globals);
1761 Py_XDECREF(fromlist);
1762 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001763}
1764
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001765PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001766PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001767 PyObject *fromlist, int level)
1768{
1769 PyObject *nameobj, *mod;
1770 nameobj = PyUnicode_FromString(name);
1771 if (nameobj == NULL)
1772 return NULL;
1773 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1774 fromlist, level);
1775 Py_DECREF(nameobj);
1776 return mod;
1777}
1778
1779
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001780/* Re-import a module of any kind and return its module object, WITH
1781 INCREMENTED REFERENCE COUNT */
1782
Guido van Rossum79f25d91997-04-29 20:08:16 +00001783PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001784PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 PyInterpreterState *interp = PyThreadState_Get()->interp;
1787 PyObject *modules_reloading = interp->modules_reloading;
1788 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon8a1d04c2012-04-15 17:56:09 -04001789 PyObject *loader = NULL, *existing_m = NULL;
1790 PyObject *name;
Martin v. Löwis796ea532011-10-30 09:07:07 +01001791 Py_ssize_t subname_start;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001792 PyObject *newm = NULL;
Brett Cannon8a1d04c2012-04-15 17:56:09 -04001793 _Py_IDENTIFIER(__loader__);
1794 _Py_IDENTIFIER(load_module);
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001796 if (modules_reloading == NULL) {
1797 Py_FatalError("PyImport_ReloadModule: "
1798 "no modules_reloading dictionary!");
1799 return NULL;
1800 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 if (m == NULL || !PyModule_Check(m)) {
1803 PyErr_SetString(PyExc_TypeError,
1804 "reload() argument must be module");
1805 return NULL;
1806 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01001807 name = PyModule_GetNameObject(m);
1808 if (name == NULL || PyUnicode_READY(name) == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 return NULL;
Martin v. Löwis796ea532011-10-30 09:07:07 +01001810 if (m != PyDict_GetItem(modules, name)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001811 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001812 "reload(): module %R not in sys.modules",
Martin v. Löwis796ea532011-10-30 09:07:07 +01001813 name);
1814 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 return NULL;
1816 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01001817 existing_m = PyDict_GetItem(modules_reloading, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 if (existing_m != NULL) {
1819 /* Due to a recursive reload, this module is already
1820 being reloaded. */
Martin v. Löwis796ea532011-10-30 09:07:07 +01001821 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 Py_INCREF(existing_m);
1823 return existing_m;
1824 }
Martin v. Löwis796ea532011-10-30 09:07:07 +01001825 if (PyDict_SetItem(modules_reloading, name, m) < 0) {
1826 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001827 return NULL;
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001828 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001829
Martin v. Löwis796ea532011-10-30 09:07:07 +01001830 subname_start = PyUnicode_FindChar(name, '.', 0,
1831 PyUnicode_GET_LENGTH(name), -1);
Brett Cannon8a1d04c2012-04-15 17:56:09 -04001832 if (subname_start != -1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 PyObject *parentname, *parent;
Martin v. Löwis796ea532011-10-30 09:07:07 +01001834 parentname = PyUnicode_Substring(name, 0, subname_start);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 if (parentname == NULL) {
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001836 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 }
1838 parent = PyDict_GetItem(modules, parentname);
Brett Cannon8a1d04c2012-04-15 17:56:09 -04001839 Py_XDECREF(parent);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 if (parent == NULL) {
1841 PyErr_Format(PyExc_ImportError,
Victor Stinner98dbba52011-03-14 15:15:47 -04001842 "reload(): parent %R not in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 parentname);
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001844 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001845 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00001847
Brett Cannon8a1d04c2012-04-15 17:56:09 -04001848 loader = _PyObject_GetAttrId(m, &PyId___loader__);
1849 if (loader == NULL) {
1850 goto error;
1851 }
1852 newm = _PyObject_CallMethodId(loader, &PyId_load_module, "O", name);
1853 Py_DECREF(loader);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001854 if (newm == NULL) {
1855 /* load_module probably removed name from modules because of
1856 * the error. Put back the original module object. We're
1857 * going to return NULL in this case regardless of whether
1858 * replacing name succeeds, so the return value is ignored.
1859 */
Martin v. Löwis796ea532011-10-30 09:07:07 +01001860 PyDict_SetItem(modules, name, m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001862
1863error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001864 imp_modules_reloading_clear();
Martin v. Löwis796ea532011-10-30 09:07:07 +01001865 Py_DECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867}
1868
1869
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001870/* Higher-level import emulator which emulates the "import" statement
1871 more accurately -- it invokes the __import__() function from the
1872 builtins of the current globals. This means that the import is
1873 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001874 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001875 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001876 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001877 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001878
1879PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001880PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001881{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 static PyObject *silly_list = NULL;
1883 static PyObject *builtins_str = NULL;
1884 static PyObject *import_str = NULL;
1885 PyObject *globals = NULL;
1886 PyObject *import = NULL;
1887 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001888 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001891 /* Initialize constant string objects */
1892 if (silly_list == NULL) {
1893 import_str = PyUnicode_InternFromString("__import__");
1894 if (import_str == NULL)
1895 return NULL;
1896 builtins_str = PyUnicode_InternFromString("__builtins__");
1897 if (builtins_str == NULL)
1898 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001899 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 if (silly_list == NULL)
1901 return NULL;
1902 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 /* Get the builtins from current globals */
1905 globals = PyEval_GetGlobals();
1906 if (globals != NULL) {
1907 Py_INCREF(globals);
1908 builtins = PyObject_GetItem(globals, builtins_str);
1909 if (builtins == NULL)
1910 goto err;
1911 }
1912 else {
1913 /* No globals -- use standard builtins, and fake globals */
1914 builtins = PyImport_ImportModuleLevel("builtins",
1915 NULL, NULL, NULL, 0);
1916 if (builtins == NULL)
1917 return NULL;
1918 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1919 if (globals == NULL)
1920 goto err;
1921 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001923 /* Get the __import__ function from the builtins */
1924 if (PyDict_Check(builtins)) {
1925 import = PyObject_GetItem(builtins, import_str);
1926 if (import == NULL)
1927 PyErr_SetObject(PyExc_KeyError, import_str);
1928 }
1929 else
1930 import = PyObject_GetAttr(builtins, import_str);
1931 if (import == NULL)
1932 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001935 Always use absolute import here.
1936 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1938 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001939 if (r == NULL)
1940 goto err;
1941 Py_DECREF(r);
1942
1943 modules = PyImport_GetModuleDict();
1944 r = PyDict_GetItem(modules, module_name);
1945 if (r != NULL)
1946 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001947
1948 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 Py_XDECREF(globals);
1950 Py_XDECREF(builtins);
1951 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001952
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001953 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001954}
1955
1956
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001957/* Module 'imp' provides Python access to the primitives used for
1958 importing modules.
1959*/
1960
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00001962imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001963{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001964 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001966 buf[0] = (char) ((magic >> 0) & 0xff);
1967 buf[1] = (char) ((magic >> 8) & 0xff);
1968 buf[2] = (char) ((magic >> 16) & 0xff);
1969 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00001972}
Barry Warsaw28a691b2010-04-17 00:19:56 +00001973
1974static PyObject *
1975imp_get_magic(PyObject *self, PyObject *noargs)
1976{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001978}
1979
1980static PyObject *
1981imp_get_tag(PyObject *self, PyObject *noargs)
1982{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001984}
1985
Guido van Rossum79f25d91997-04-29 20:08:16 +00001986static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00001987imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001988{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 PyObject *list;
1990 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 list = PyList_New(0);
1993 if (list == NULL)
1994 return NULL;
1995 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1996 PyObject *item = Py_BuildValue("ssi",
1997 fdp->suffix, fdp->mode, fdp->type);
1998 if (item == NULL) {
1999 Py_DECREF(list);
2000 return NULL;
2001 }
2002 if (PyList_Append(list, item) < 0) {
2003 Py_DECREF(list);
2004 Py_DECREF(item);
2005 return NULL;
2006 }
2007 Py_DECREF(item);
2008 }
2009 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002010}
2011
Guido van Rossum79f25d91997-04-29 20:08:16 +00002012static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002013imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002014{
Victor Stinner95872862011-03-07 18:20:56 +01002015 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 int ret;
2017 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01002018 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 return NULL;
2020 ret = init_builtin(name);
2021 if (ret < 0)
2022 return NULL;
2023 if (ret == 0) {
2024 Py_INCREF(Py_None);
2025 return Py_None;
2026 }
Victor Stinner95872862011-03-07 18:20:56 +01002027 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002028 Py_XINCREF(m);
2029 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002030}
2031
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002033imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002034{
Victor Stinner53dc7352011-03-20 01:50:21 +01002035 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 int ret;
2037 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01002038 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01002040 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002041 if (ret < 0)
2042 return NULL;
2043 if (ret == 0) {
2044 Py_INCREF(Py_None);
2045 return Py_None;
2046 }
Victor Stinner53dc7352011-03-20 01:50:21 +01002047 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048 Py_XINCREF(m);
2049 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002050}
2051
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002053imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002054{
Victor Stinner53dc7352011-03-20 01:50:21 +01002055 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002056
Victor Stinner53dc7352011-03-20 01:50:21 +01002057 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 return NULL;
2059 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002060}
2061
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00002063imp_is_frozen_package(PyObject *self, PyObject *args)
2064{
Victor Stinner53dc7352011-03-20 01:50:21 +01002065 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00002066
Victor Stinner53dc7352011-03-20 01:50:21 +01002067 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 return NULL;
2069 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00002070}
2071
2072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002073imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002074{
Victor Stinner95872862011-03-07 18:20:56 +01002075 PyObject *name;
2076 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 return NULL;
2078 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002079}
2080
Guido van Rossum79f25d91997-04-29 20:08:16 +00002081static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002082imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002083{
Victor Stinner53dc7352011-03-20 01:50:21 +01002084 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01002086 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002087 return NULL;
2088 p = find_frozen(name);
2089 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002090}
2091
2092static FILE *
Victor Stinner2f42ae52011-03-20 00:41:24 +01002093get_file(PyObject *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002094{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002095 FILE *fp;
2096 if (mode[0] == 'U')
2097 mode = "r" PY_STDIOTEXTMODE;
2098 if (fob == NULL) {
Victor Stinner2f42ae52011-03-20 00:41:24 +01002099 fp = _Py_fopen(pathname, mode);
Victor Stinner35734762011-12-18 21:05:22 +01002100 if (!fp) {
2101 if (!PyErr_Occurred())
2102 PyErr_SetFromErrno(PyExc_IOError);
2103 return NULL;
2104 }
2105 return fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 }
2107 else {
2108 int fd = PyObject_AsFileDescriptor(fob);
2109 if (fd == -1)
2110 return NULL;
Victor Stinner35734762011-12-18 21:05:22 +01002111 if (!_PyVerify_fd(fd)) {
2112 PyErr_SetFromErrno(PyExc_IOError);
2113 return NULL;
2114 }
2115
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 /* the FILE struct gets a new fd, so that it can be closed
2117 * independently of the file descriptor given
2118 */
2119 fd = dup(fd);
Victor Stinner35734762011-12-18 21:05:22 +01002120 if (fd == -1) {
2121 PyErr_SetFromErrno(PyExc_IOError);
2122 return NULL;
2123 }
2124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 fp = fdopen(fd, mode);
Victor Stinner35734762011-12-18 21:05:22 +01002126 if (!fp) {
2127 PyErr_SetFromErrno(PyExc_IOError);
2128 return NULL;
2129 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002130 return fp;
Victor Stinner35734762011-12-18 21:05:22 +01002131 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132}
2133
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002134#ifdef HAVE_DYNAMIC_LOADING
2135
Guido van Rossum79f25d91997-04-29 20:08:16 +00002136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002137imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002138{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002139 PyObject *name, *pathname, *fob = NULL, *mod;
2140 FILE *fp;
2141
2142 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
2143 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002145 if (fob != NULL) {
2146 fp = get_file(NULL, fob, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01002147 if (fp == NULL) {
2148 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01002150 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002151 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002152 else
2153 fp = NULL;
2154 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01002155 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 if (fp)
2157 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04002158 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002159}
2160
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002161#endif /* HAVE_DYNAMIC_LOADING */
2162
Guido van Rossum79f25d91997-04-29 20:08:16 +00002163static PyObject *
Christian Heimes13a7a212008-01-07 17:13:09 +00002164imp_reload(PyObject *self, PyObject *v)
2165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00002167}
2168
2169PyDoc_STRVAR(doc_reload,
2170"reload(module) -> module\n\
2171\n\
2172Reload the module. The module must have been successfully imported before.");
2173
Barry Warsaw28a691b2010-04-17 00:19:56 +00002174
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002175/* Doc strings */
2176
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002177PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04002178"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002179
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002180PyDoc_STRVAR(doc_get_magic,
2181"get_magic() -> string\n\
2182Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002183
Barry Warsaw28a691b2010-04-17 00:19:56 +00002184PyDoc_STRVAR(doc_get_tag,
2185"get_tag() -> string\n\
2186Return the magic tag for .pyc or .pyo files.");
2187
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002188PyDoc_STRVAR(doc_get_suffixes,
2189"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002190Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002191that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002192
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002193PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002194"lock_held() -> boolean\n\
2195Return True if the import lock is currently held, else False.\n\
2196On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002197
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002198PyDoc_STRVAR(doc_acquire_lock,
2199"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002200Acquires the interpreter's import lock for the current thread.\n\
2201This lock should be used by import hooks to ensure thread-safety\n\
2202when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002203On platforms without threads, this function does nothing.");
2204
2205PyDoc_STRVAR(doc_release_lock,
2206"release_lock() -> None\n\
2207Release the interpreter's import lock.\n\
2208On platforms without threads, this function does nothing.");
2209
Guido van Rossum79f25d91997-04-29 20:08:16 +00002210static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002211 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2212 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
2213 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2215 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2216 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
2217 {"reload", imp_reload, METH_O, doc_reload},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002218 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2219 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
2220 {"init_builtin", imp_init_builtin, METH_VARARGS},
2221 {"init_frozen", imp_init_frozen, METH_VARARGS},
2222 {"is_builtin", imp_is_builtin, METH_VARARGS},
2223 {"is_frozen", imp_is_frozen, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002224#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002226#endif
Brett Cannon442c9b92011-03-23 16:14:42 -07002227 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002229};
2230
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002231static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002232setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002233{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002234 PyObject *v;
2235 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 v = PyLong_FromLong((long)value);
2238 err = PyDict_SetItemString(d, name, v);
2239 Py_XDECREF(v);
2240 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002241}
2242
Martin v. Löwis1a214512008-06-11 05:26:20 +00002243static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002244 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04002245 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 doc_imp,
2247 0,
2248 imp_methods,
2249 NULL,
2250 NULL,
2251 NULL,
2252 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002253};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002254
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002255PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00002256PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002257{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002258 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 m = PyModule_Create(&impmodule);
2261 if (m == NULL)
2262 goto failure;
2263 d = PyModule_GetDict(m);
2264 if (d == NULL)
2265 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002267 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2268 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2269 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2270 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2271 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2272 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2273 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2274 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
2275 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
2276 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002279 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002280 Py_XDECREF(m);
2281 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002282}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002283
2284
Guido van Rossumb18618d2000-05-03 23:44:39 +00002285/* API for embedding applications that want to add their own entries
2286 to the table of built-in modules. This should normally be called
2287 *before* Py_Initialize(). When the table resize fails, -1 is
2288 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002289
2290 After a similar function by Just van Rossum. */
2291
2292int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002293PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002294{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 static struct _inittab *our_copy = NULL;
2296 struct _inittab *p;
2297 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 /* Count the number of entries in both tables */
2300 for (n = 0; newtab[n].name != NULL; n++)
2301 ;
2302 if (n == 0)
2303 return 0; /* Nothing to do */
2304 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2305 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002307 /* Allocate new memory for the combined table */
2308 p = our_copy;
2309 PyMem_RESIZE(p, struct _inittab, i+n+1);
2310 if (p == NULL)
2311 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002313 /* Copy the tables into the new memory */
2314 if (our_copy != PyImport_Inittab)
2315 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2316 PyImport_Inittab = our_copy = p;
2317 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002319 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002320}
2321
2322/* Shorthand to add a single entry given a name and a function */
2323
2324int
Brett Cannona826f322009-04-02 03:41:46 +00002325PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002329 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002331 newtab[0].name = (char *)name;
2332 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002335}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002336
2337#ifdef __cplusplus
2338}
2339#endif