blob: 701a6e9eb5a0804a0a2040e239f78b9e8fafad52 [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)
Nick Coghlan0b43bcf2012-05-27 18:17:07 +1000109 Python 3.3a4 3230 (revert changes to implicit __class__ closure)
Tim Peters36515e22001-11-18 04:06:29 +0000110*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000111
Nick Coghlancd419ab2010-09-11 00:39:25 +0000112/* MAGIC must change whenever the bytecode emitted by the compiler may no
113 longer be understood by older implementations of the eval loop (usually
114 due to the addition of new opcodes)
Martin v. Löwisfadcd312011-10-23 18:08:20 +0200115 TAG must change for each major Python release. The magic number will take
116 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000117*/
Benjamin Peterson48deae12011-06-03 17:50:16 -0500118#define QUOTE(arg) #arg
119#define STRIFY(name) QUOTE(name)
120#define MAJOR STRIFY(PY_MAJOR_VERSION)
121#define MINOR STRIFY(PY_MINOR_VERSION)
Nick Coghlan0b43bcf2012-05-27 18:17:07 +1000122#define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24))
Benjamin Peterson48deae12011-06-03 17:50:16 -0500123#define TAG "cpython-" MAJOR MINOR;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000124#define CACHEDIR "__pycache__"
125/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000126static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000127static const char *pyc_tag = TAG;
Benjamin Peterson48deae12011-06-03 17:50:16 -0500128#undef QUOTE
129#undef STRIFY
130#undef MAJOR
131#undef MINOR
Guido van Rossum96774c12000-05-01 20:19:08 +0000132
Victor Stinner95872862011-03-07 18:20:56 +0100133/* See _PyImport_FixupExtensionObject() below */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000135
Victor Stinnerfe7c5b52011-04-05 01:48:03 +0200136/* Function from Parser/tokenizer.c */
137extern char * PyTokenizer_FindEncodingFilename(int, PyObject *);
138
Guido van Rossum771c6c81997-10-31 18:37:24 +0000139/* This table is defined in config.c: */
140extern struct _inittab _PyImport_Inittab[];
141
142struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000143
Victor Stinnerd0296212011-03-14 14:04:10 -0400144static PyObject *initstr = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000145
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000146/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000147
148void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000149_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150{
Victor Stinnerd0296212011-03-14 14:04:10 -0400151 initstr = PyUnicode_InternFromString("__init__");
152 if (initstr == NULL)
153 Py_FatalError("Can't initialize import variables");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000154}
155
Guido van Rossum25ce5661997-08-02 03:10:38 +0000156void
Just van Rossum52e14d62002-12-30 22:08:05 +0000157_PyImportHooks_Init(void)
158{
Brett Cannonfd074152012-04-14 14:10:13 -0400159 PyObject *v, *path_hooks = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000161
Brett Cannonfd074152012-04-14 14:10:13 -0400162 /* adding sys.path_hooks and sys.path_importer_cache */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 v = PyList_New(0);
164 if (v == NULL)
165 goto error;
166 err = PySys_SetObject("meta_path", v);
167 Py_DECREF(v);
168 if (err)
169 goto error;
170 v = PyDict_New();
171 if (v == NULL)
172 goto error;
173 err = PySys_SetObject("path_importer_cache", v);
174 Py_DECREF(v);
175 if (err)
176 goto error;
177 path_hooks = PyList_New(0);
178 if (path_hooks == NULL)
179 goto error;
180 err = PySys_SetObject("path_hooks", path_hooks);
181 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000182 error:
Brett Cannonfd074152012-04-14 14:10:13 -0400183 PyErr_Print();
184 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
Nadeem Vawda8f46d652012-05-05 12:27:30 +0200185 "or path_importer_cache failed");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000186 }
Brett Cannonfd074152012-04-14 14:10:13 -0400187 Py_DECREF(path_hooks);
188}
189
190void
191_PyImportZip_Init(void)
192{
193 PyObject *path_hooks, *zimpimport;
194 int err = 0;
195
196 path_hooks = PySys_GetObject("path_hooks");
197 if (path_hooks == NULL)
198 goto error;
199
200 if (Py_VerboseFlag)
201 PySys_WriteStderr("# installing zipimport hook\n");
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 zimpimport = PyImport_ImportModule("zipimport");
204 if (zimpimport == NULL) {
205 PyErr_Clear(); /* No zip import module -- okay */
206 if (Py_VerboseFlag)
207 PySys_WriteStderr("# can't import zipimport\n");
208 }
209 else {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200210 _Py_IDENTIFIER(zipimporter);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200211 PyObject *zipimporter = _PyObject_GetAttrId(zimpimport,
212 &PyId_zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000213 Py_DECREF(zimpimport);
214 if (zipimporter == NULL) {
215 PyErr_Clear(); /* No zipimporter object -- okay */
216 if (Py_VerboseFlag)
217 PySys_WriteStderr(
218 "# can't import zipimport.zipimporter\n");
219 }
220 else {
Brett Cannon8923a4d2012-04-24 22:03:46 -0400221 /* sys.path_hooks.insert(0, zipimporter) */
222 err = PyList_Insert(path_hooks, 0, zipimporter);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 Py_DECREF(zipimporter);
Brett Cannonfd074152012-04-14 14:10:13 -0400224 if (err < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -0400226 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000227 if (Py_VerboseFlag)
228 PySys_WriteStderr(
229 "# installed zipimport hook\n");
230 }
231 }
Brett Cannonfd074152012-04-14 14:10:13 -0400232
233 return;
234
235 error:
236 PyErr_Print();
Brett Cannonacf85cd2012-04-29 12:50:03 -0400237 Py_FatalError("initializing zipimport failed");
Just van Rossum52e14d62002-12-30 22:08:05 +0000238}
239
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000240/* Locking primitives to prevent parallel imports of the same module
241 in different threads to return with a partially loaded module.
242 These calls are serialized by the global interpreter lock. */
243
244#ifdef WITH_THREAD
245
Guido van Rossum49b56061998-10-01 20:42:43 +0000246#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000247
Guido van Rossum65d5b571998-12-21 19:32:43 +0000248static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000249static long import_lock_thread = -1;
250static int import_lock_level = 0;
251
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000252void
253_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 long me = PyThread_get_thread_ident();
256 if (me == -1)
257 return; /* Too bad */
258 if (import_lock == NULL) {
259 import_lock = PyThread_allocate_lock();
260 if (import_lock == NULL)
261 return; /* Nothing much we can do. */
262 }
263 if (import_lock_thread == me) {
264 import_lock_level++;
265 return;
266 }
267 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
268 {
269 PyThreadState *tstate = PyEval_SaveThread();
270 PyThread_acquire_lock(import_lock, 1);
271 PyEval_RestoreThread(tstate);
272 }
273 import_lock_thread = me;
274 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000275}
276
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000277int
278_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000279{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000280 long me = PyThread_get_thread_ident();
281 if (me == -1 || import_lock == NULL)
282 return 0; /* Too bad */
283 if (import_lock_thread != me)
284 return -1;
285 import_lock_level--;
286 if (import_lock_level == 0) {
287 import_lock_thread = -1;
288 PyThread_release_lock(import_lock);
289 }
290 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000291}
292
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000293/* This function is called from PyOS_AfterFork to ensure that newly
294 created child processes do not share locks with the parent.
295 We now acquire the import lock around fork() calls but on some platforms
296 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000297
298void
299_PyImport_ReInitLock(void)
300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 if (import_lock != NULL)
302 import_lock = PyThread_allocate_lock();
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000303 if (import_lock_level > 1) {
304 /* Forked as a side effect of import */
305 long me = PyThread_get_thread_ident();
306 PyThread_acquire_lock(import_lock, 0);
Victor Stinner942003c2011-03-07 16:57:48 +0100307 /* XXX: can the previous line fail? */
Nick Coghlanb2ddf792010-12-02 04:11:46 +0000308 import_lock_thread = me;
309 import_lock_level--;
310 } else {
311 import_lock_thread = -1;
312 import_lock_level = 0;
313 }
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000314}
315
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000316#endif
317
Tim Peters69232342001-08-30 05:16:13 +0000318static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000319imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000320{
Tim Peters69232342001-08-30 05:16:13 +0000321#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000323#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000325#endif
326}
327
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000328static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000329imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000330{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000331#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000333#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 Py_INCREF(Py_None);
335 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000336}
337
338static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000339imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000340{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000341#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if (_PyImport_ReleaseLock() < 0) {
343 PyErr_SetString(PyExc_RuntimeError,
344 "not holding the import lock");
345 return NULL;
346 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000347#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000348 Py_INCREF(Py_None);
349 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000350}
351
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100352void
353_PyImport_Fini(void)
354{
355 Py_XDECREF(extensions);
356 extensions = NULL;
Antoine Pitrou8db076c2011-10-30 19:13:55 +0100357#ifdef WITH_THREAD
358 if (import_lock != NULL) {
359 PyThread_free_lock(import_lock);
360 import_lock = NULL;
361 }
362#endif
363}
364
Guido van Rossum25ce5661997-08-02 03:10:38 +0000365/* Helper for sys */
366
367PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000368PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000369{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 PyInterpreterState *interp = PyThreadState_GET()->interp;
371 if (interp->modules == NULL)
372 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
373 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000374}
375
Guido van Rossum3f5da241990-12-20 15:06:42 +0000376
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000377/* List of names to clear in sys */
378static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 "path", "argv", "ps1", "ps2",
380 "last_type", "last_value", "last_traceback",
381 "path_hooks", "path_importer_cache", "meta_path",
382 /* misc stuff */
383 "flags", "float_info",
384 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000385};
386
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000387static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 "stdin", "__stdin__",
389 "stdout", "__stdout__",
390 "stderr", "__stderr__",
391 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000392};
393
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000394
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000395/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000396
Guido van Rossum3f5da241990-12-20 15:06:42 +0000397void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000398PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 Py_ssize_t pos, ndone;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 PyObject *key, *value, *dict;
402 PyInterpreterState *interp = PyThreadState_GET()->interp;
403 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 if (modules == NULL)
406 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000408 /* Delete some special variables first. These are common
409 places where user values hide and people complain when their
410 destructors fail. Since the modules containing them are
411 deleted *last* of all, they would come too late in the normal
412 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 value = PyDict_GetItemString(modules, "builtins");
415 if (value != NULL && PyModule_Check(value)) {
416 dict = PyModule_GetDict(value);
417 if (Py_VerboseFlag)
418 PySys_WriteStderr("# clear builtins._\n");
419 PyDict_SetItemString(dict, "_", Py_None);
420 }
421 value = PyDict_GetItemString(modules, "sys");
422 if (value != NULL && PyModule_Check(value)) {
423 char **p;
424 PyObject *v;
425 dict = PyModule_GetDict(value);
426 for (p = sys_deletes; *p != NULL; p++) {
427 if (Py_VerboseFlag)
428 PySys_WriteStderr("# clear sys.%s\n", *p);
429 PyDict_SetItemString(dict, *p, Py_None);
430 }
431 for (p = sys_files; *p != NULL; p+=2) {
432 if (Py_VerboseFlag)
433 PySys_WriteStderr("# restore sys.%s\n", *p);
434 v = PyDict_GetItemString(dict, *(p+1));
435 if (v == NULL)
436 v = Py_None;
437 PyDict_SetItemString(dict, *p, v);
438 }
439 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 /* First, delete __main__ */
442 value = PyDict_GetItemString(modules, "__main__");
443 if (value != NULL && PyModule_Check(value)) {
444 if (Py_VerboseFlag)
445 PySys_WriteStderr("# cleanup __main__\n");
446 _PyModule_Clear(value);
447 PyDict_SetItemString(modules, "__main__", Py_None);
448 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 /* The special treatment of "builtins" here is because even
451 when it's not referenced as a module, its dictionary is
452 referenced by almost every module's __builtins__. Since
453 deleting a module clears its dictionary (even if there are
454 references left to it), we need to delete the "builtins"
455 module last. Likewise, we don't delete sys until the very
456 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000458 Also note that we 'delete' modules by replacing their entry
459 in the modules dict with None, rather than really deleting
460 them; this avoids a rehash of the modules dictionary and
461 also marks them as "non existent" so they won't be
462 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 /* Next, repeatedly delete modules with a reference count of
465 one (skipping builtins and sys) and delete them */
466 do {
467 ndone = 0;
468 pos = 0;
469 while (PyDict_Next(modules, &pos, &key, &value)) {
470 if (value->ob_refcnt != 1)
471 continue;
472 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100473 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100475 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000476 continue;
477 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100478 PySys_FormatStderr(
479 "# cleanup[1] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 _PyModule_Clear(value);
481 PyDict_SetItem(modules, key, Py_None);
482 ndone++;
483 }
484 }
485 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 /* Next, delete all modules (still skipping builtins and sys) */
488 pos = 0;
489 while (PyDict_Next(modules, &pos, &key, &value)) {
490 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Victor Stinner9464d612011-03-07 17:08:21 +0100491 if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000492 continue;
Victor Stinner9464d612011-03-07 17:08:21 +0100493 if (PyUnicode_CompareWithASCIIString(key, "sys") == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 continue;
495 if (Py_VerboseFlag)
Victor Stinner9464d612011-03-07 17:08:21 +0100496 PySys_FormatStderr("# cleanup[2] %U\n", key);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 _PyModule_Clear(value);
498 PyDict_SetItem(modules, key, Py_None);
499 }
500 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 /* Next, delete sys and builtins (in that order) */
503 value = PyDict_GetItemString(modules, "sys");
504 if (value != NULL && PyModule_Check(value)) {
505 if (Py_VerboseFlag)
506 PySys_WriteStderr("# cleanup sys\n");
507 _PyModule_Clear(value);
508 PyDict_SetItemString(modules, "sys", Py_None);
509 }
510 value = PyDict_GetItemString(modules, "builtins");
511 if (value != NULL && PyModule_Check(value)) {
512 if (Py_VerboseFlag)
513 PySys_WriteStderr("# cleanup builtins\n");
514 _PyModule_Clear(value);
515 PyDict_SetItemString(modules, "builtins", Py_None);
516 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* Finally, clear and delete the modules directory */
519 PyDict_Clear(modules);
520 interp->modules = NULL;
521 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000522}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000523
524
Barry Warsaw28a691b2010-04-17 00:19:56 +0000525/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
527long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000528PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000529{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000531}
532
533
Barry Warsaw28a691b2010-04-17 00:19:56 +0000534const char *
535PyImport_GetMagicTag(void)
536{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000538}
539
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540/* Magic for extension modules (built-in as well as dynamically
541 loaded). To prevent initializing an extension module more than
542 once, we keep a static dictionary 'extensions' keyed by module name
543 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000544 modules), containing these modules. A copy of the module's
Victor Stinner95872862011-03-07 18:20:56 +0100545 dictionary is stored by calling _PyImport_FixupExtensionObject()
Guido van Rossum25ce5661997-08-02 03:10:38 +0000546 immediately after the module initialization function succeeds. A
547 copy can be retrieved from there by calling
Victor Stinner95872862011-03-07 18:20:56 +0100548 _PyImport_FindExtensionObject().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000550 Modules which do support multiple initialization set their m_size
551 field to a non-negative number (indicating the size of the
552 module-specific state). They are still recorded in the extensions
553 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000554*/
555
556int
Victor Stinner95872862011-03-07 18:20:56 +0100557_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
558 PyObject *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000559{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 PyObject *modules, *dict;
561 struct PyModuleDef *def;
562 if (extensions == NULL) {
563 extensions = PyDict_New();
564 if (extensions == NULL)
565 return -1;
566 }
567 if (mod == NULL || !PyModule_Check(mod)) {
568 PyErr_BadInternalCall();
569 return -1;
570 }
571 def = PyModule_GetDef(mod);
572 if (!def) {
573 PyErr_BadInternalCall();
574 return -1;
575 }
576 modules = PyImport_GetModuleDict();
Victor Stinner95872862011-03-07 18:20:56 +0100577 if (PyDict_SetItem(modules, name, mod) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 return -1;
579 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100580 PyDict_DelItem(modules, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return -1;
582 }
583 if (def->m_size == -1) {
584 if (def->m_base.m_copy) {
585 /* Somebody already imported the module,
586 likely under a different name.
587 XXX this should really not happen. */
588 Py_DECREF(def->m_base.m_copy);
589 def->m_base.m_copy = NULL;
590 }
591 dict = PyModule_GetDict(mod);
592 if (dict == NULL)
593 return -1;
594 def->m_base.m_copy = PyDict_Copy(dict);
595 if (def->m_base.m_copy == NULL)
596 return -1;
597 }
Victor Stinner49d3f252010-10-17 01:24:53 +0000598 PyDict_SetItem(extensions, filename, (PyObject*)def);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000600}
601
Victor Stinner49d3f252010-10-17 01:24:53 +0000602int
603_PyImport_FixupBuiltin(PyObject *mod, char *name)
604{
605 int res;
Victor Stinner95872862011-03-07 18:20:56 +0100606 PyObject *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100607 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100608 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000609 return -1;
Victor Stinner95872862011-03-07 18:20:56 +0100610 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj);
611 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000612 return res;
613}
614
Guido van Rossum25ce5661997-08-02 03:10:38 +0000615PyObject *
Victor Stinner95872862011-03-07 18:20:56 +0100616_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000617{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 PyObject *mod, *mdict;
619 PyModuleDef* def;
620 if (extensions == NULL)
621 return NULL;
Victor Stinner49d3f252010-10-17 01:24:53 +0000622 def = (PyModuleDef*)PyDict_GetItem(extensions, filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 if (def == NULL)
624 return NULL;
625 if (def->m_size == -1) {
626 /* Module does not support repeated initialization */
627 if (def->m_base.m_copy == NULL)
628 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100629 mod = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 if (mod == NULL)
631 return NULL;
632 mdict = PyModule_GetDict(mod);
633 if (mdict == NULL)
634 return NULL;
635 if (PyDict_Update(mdict, def->m_base.m_copy))
636 return NULL;
637 }
638 else {
639 if (def->m_base.m_init == NULL)
640 return NULL;
641 mod = def->m_base.m_init();
642 if (mod == NULL)
643 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100644 PyDict_SetItem(PyImport_GetModuleDict(), name, mod);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 Py_DECREF(mod);
646 }
647 if (_PyState_AddModule(mod, def) < 0) {
Victor Stinner95872862011-03-07 18:20:56 +0100648 PyDict_DelItem(PyImport_GetModuleDict(), name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000649 Py_DECREF(mod);
650 return NULL;
651 }
652 if (Py_VerboseFlag)
Victor Stinner95872862011-03-07 18:20:56 +0100653 PySys_FormatStderr("import %U # previously loaded (%R)\n",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 name, filename);
655 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000656
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657}
658
Victor Stinner49d3f252010-10-17 01:24:53 +0000659PyObject *
Victor Stinner501c09a2011-02-23 00:02:00 +0000660_PyImport_FindBuiltin(const char *name)
Victor Stinner49d3f252010-10-17 01:24:53 +0000661{
Victor Stinner95872862011-03-07 18:20:56 +0100662 PyObject *res, *nameobj;
Victor Stinner21fcd0c2011-03-07 18:28:15 +0100663 nameobj = PyUnicode_InternFromString(name);
Victor Stinner95872862011-03-07 18:20:56 +0100664 if (nameobj == NULL)
Victor Stinner49d3f252010-10-17 01:24:53 +0000665 return NULL;
Victor Stinner95872862011-03-07 18:20:56 +0100666 res = _PyImport_FindExtensionObject(nameobj, nameobj);
667 Py_DECREF(nameobj);
Victor Stinner49d3f252010-10-17 01:24:53 +0000668 return res;
669}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000670
671/* Get the module object corresponding to a module name.
672 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000673 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000674 Because the former action is most common, THIS DOES NOT RETURN A
675 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676
Guido van Rossum79f25d91997-04-29 20:08:16 +0000677PyObject *
Victor Stinner27ee0892011-03-04 12:57:09 +0000678PyImport_AddModuleObject(PyObject *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 PyObject *modules = PyImport_GetModuleDict();
681 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682
Victor Stinner27ee0892011-03-04 12:57:09 +0000683 if ((m = PyDict_GetItem(modules, name)) != NULL &&
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 PyModule_Check(m))
685 return m;
Victor Stinner27ee0892011-03-04 12:57:09 +0000686 m = PyModule_NewObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 if (m == NULL)
688 return NULL;
Victor Stinner27ee0892011-03-04 12:57:09 +0000689 if (PyDict_SetItem(modules, name, m) != 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000690 Py_DECREF(m);
691 return NULL;
692 }
693 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696}
697
Victor Stinner27ee0892011-03-04 12:57:09 +0000698PyObject *
699PyImport_AddModule(const char *name)
700{
701 PyObject *nameobj, *module;
702 nameobj = PyUnicode_FromString(name);
703 if (nameobj == NULL)
704 return NULL;
705 module = PyImport_AddModuleObject(nameobj);
706 Py_DECREF(nameobj);
707 return module;
708}
709
710
Tim Peters1cd70172004-08-02 03:52:12 +0000711/* Remove name from sys.modules, if it's there. */
712static void
Victor Stinner27ee0892011-03-04 12:57:09 +0000713remove_module(PyObject *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000714{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 PyObject *modules = PyImport_GetModuleDict();
Victor Stinner27ee0892011-03-04 12:57:09 +0000716 if (PyDict_GetItem(modules, name) == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 return;
Victor Stinner27ee0892011-03-04 12:57:09 +0000718 if (PyDict_DelItem(modules, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 Py_FatalError("import: deleting existing key in"
720 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000721}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Victor Stinnerc9abda02011-03-14 13:33:46 -0400723static PyObject * get_sourcefile(PyObject *filename);
724static PyObject *make_source_pathname(PyObject *pathname);
Christian Heimes3b06e532008-01-07 20:12:44 +0000725
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000726/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000727 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
728 * removed from sys.modules, to avoid leaving damaged module objects
729 * in sys.modules. The caller may wish to restore the original
730 * module object (if any) in this case; PyImport_ReloadModule is an
731 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000732 *
733 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
734 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000735 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000736PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000737PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 return PyImport_ExecCodeModuleWithPathnames(
740 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000741}
742
743PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000744PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000745{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 return PyImport_ExecCodeModuleWithPathnames(
747 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000748}
749
750PyObject *
751PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000753{
Victor Stinner27ee0892011-03-04 12:57:09 +0000754 PyObject *m = NULL;
755 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL;
756
757 nameobj = PyUnicode_FromString(name);
758 if (nameobj == NULL)
759 return NULL;
760
761 if (pathname != NULL) {
762 pathobj = PyUnicode_DecodeFSDefault(pathname);
763 if (pathobj == NULL)
764 goto error;
765 } else
766 pathobj = NULL;
767 if (cpathname != NULL) {
768 cpathobj = PyUnicode_DecodeFSDefault(cpathname);
769 if (cpathobj == NULL)
770 goto error;
771 } else
772 cpathobj = NULL;
773 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj);
774error:
775 Py_DECREF(nameobj);
776 Py_XDECREF(pathobj);
777 Py_XDECREF(cpathobj);
778 return m;
779}
780
781PyObject*
782PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
783 PyObject *cpathname)
784{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 PyObject *modules = PyImport_GetModuleDict();
786 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000787
Victor Stinner27ee0892011-03-04 12:57:09 +0000788 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 if (m == NULL)
790 return NULL;
791 /* If the module is being reloaded, we get the old module back
792 and re-use its dict to exec the new code. */
793 d = PyModule_GetDict(m);
794 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
795 if (PyDict_SetItemString(d, "__builtins__",
796 PyEval_GetBuiltins()) != 0)
797 goto error;
798 }
799 /* Remember the filename as the __file__ attribute */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 if (pathname != NULL) {
Victor Stinnerc9abda02011-03-14 13:33:46 -0400801 v = get_sourcefile(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 if (v == NULL)
803 PyErr_Clear();
804 }
Victor Stinner27ee0892011-03-04 12:57:09 +0000805 else
806 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 if (v == NULL) {
808 v = ((PyCodeObject *)co)->co_filename;
809 Py_INCREF(v);
810 }
811 if (PyDict_SetItemString(d, "__file__", v) != 0)
812 PyErr_Clear(); /* Not important enough to report */
813 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 /* Remember the pyc path name as the __cached__ attribute. */
Victor Stinner27ee0892011-03-04 12:57:09 +0000816 if (cpathname != NULL)
817 v = cpathname;
818 else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 v = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 if (PyDict_SetItemString(d, "__cached__", v) != 0)
821 PyErr_Clear(); /* Not important enough to report */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000822
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000823 v = PyEval_EvalCode(co, d, d);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 if (v == NULL)
825 goto error;
826 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000827
Victor Stinner27ee0892011-03-04 12:57:09 +0000828 if ((m = PyDict_GetItem(modules, name)) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 PyErr_Format(PyExc_ImportError,
Victor Stinner27ee0892011-03-04 12:57:09 +0000830 "Loaded module %R not found in sys.modules",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 name);
832 return NULL;
833 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000838
839 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000840 remove_module(name);
841 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000842}
843
844
Martin v. Löwis2db72862011-10-23 17:29:08 +0200845/* Like rightmost_sep, but operate on unicode objects. */
846static Py_ssize_t
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200847rightmost_sep_obj(PyObject* o, Py_ssize_t start, Py_ssize_t end)
Martin v. Löwis2db72862011-10-23 17:29:08 +0200848{
849 Py_ssize_t found, i;
850 Py_UCS4 c;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200851 for (found = -1, i = start; i < end; i++) {
Martin v. Löwis2db72862011-10-23 17:29:08 +0200852 c = PyUnicode_READ_CHAR(o, i);
853 if (c == SEP
854#ifdef ALTSEP
855 || c == ALTSEP
856#endif
857 )
858 {
859 found = i;
860 }
861 }
862 return found;
863}
Victor Stinnerc9abda02011-03-14 13:33:46 -0400864
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865
Barry Warsaw28a691b2010-04-17 00:19:56 +0000866/* Given a pathname to a Python byte compiled file, return the path to the
867 source file, if the path matches the PEP 3147 format. This does not check
868 for any file existence, however, if the pyc file name does not match PEP
869 3147 style, NULL is returned. buf must be at least as big as pathname;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400870 the resulting path will always be shorter.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871
Victor Stinnerc9abda02011-03-14 13:33:46 -0400872 (...)/__pycache__/foo.<tag>.pyc -> (...)/foo.py */
873
874static PyObject*
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200875make_source_pathname(PyObject *path)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000876{
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200877 Py_ssize_t left, right, dot0, dot1, len;
878 Py_ssize_t i, j;
879 PyObject *result;
880 int kind;
881 void *data;
Victor Stinnerc9abda02011-03-14 13:33:46 -0400882
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200883 len = PyUnicode_GET_LENGTH(path);
884 if (len > MAXPATHLEN)
Martin v. Löwisd63a3b82011-09-28 07:41:54 +0200885 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 /* Look back two slashes from the end. In between these two slashes
888 must be the string __pycache__ or this is not a PEP 3147 style
889 path. It's possible for there to be only one slash.
890 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200891 right = rightmost_sep_obj(path, 0, len);
892 if (right == -1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 return NULL;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200894 left = rightmost_sep_obj(path, 0, right);
895 if (left == -1)
896 left = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 else
898 left++;
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200899 if (right-left != sizeof(CACHEDIR)-1)
900 return NULL;
901 for (i = 0; i < sizeof(CACHEDIR)-1; i++)
902 if (PyUnicode_READ_CHAR(path, left+i) != CACHEDIR[i])
903 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000904
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000905 /* Now verify that the path component to the right of the last slash
906 has two dots in it.
907 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200908 dot0 = PyUnicode_FindChar(path, '.', right+1, len, 1);
909 if (dot0 < 0)
910 return NULL;
911 dot1 = PyUnicode_FindChar(path, '.', dot0+1, len, 1);
912 if (dot1 < 0)
913 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 /* Too many dots? */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200915 if (PyUnicode_FindChar(path, '.', dot1+1, len, 1) != -1)
916 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000917
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 /* This is a PEP 3147 path. Start by copying everything from the
919 start of pathname up to and including the leftmost slash. Then
920 copy the file's basename, removing the magic tag and adding a .py
921 suffix.
922 */
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200923 result = PyUnicode_New(left + (dot0-right) + 2,
924 PyUnicode_MAX_CHAR_VALUE(path));
925 if (!result)
926 return NULL;
927 kind = PyUnicode_KIND(result);
928 data = PyUnicode_DATA(result);
929 PyUnicode_CopyCharacters(result, 0, path, 0, (i = left));
930 PyUnicode_CopyCharacters(result, left, path, right+1,
931 (j = dot0-right));
932 PyUnicode_WRITE(kind, data, i+j, 'p');
933 PyUnicode_WRITE(kind, data, i+j+1, 'y');
Victor Stinner8f825062012-04-27 13:55:39 +0200934 assert(_PyUnicode_CheckConsistency(result, 1));
Martin v. Löwis8a0ef782011-10-23 18:05:06 +0200935 return result;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000936}
937
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000938
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000939static void
940update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
941{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 PyObject *constants, *tmp;
943 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 if (PyUnicode_Compare(co->co_filename, oldname))
946 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 tmp = co->co_filename;
949 co->co_filename = newname;
950 Py_INCREF(co->co_filename);
951 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000952
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 constants = co->co_consts;
954 n = PyTuple_GET_SIZE(constants);
955 for (i = 0; i < n; i++) {
956 tmp = PyTuple_GET_ITEM(constants, i);
957 if (PyCode_Check(tmp))
958 update_code_filenames((PyCodeObject *)tmp,
959 oldname, newname);
960 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000961}
962
Victor Stinner2f42ae52011-03-20 00:41:24 +0100963static void
964update_compiled_module(PyCodeObject *co, PyObject *newname)
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000965{
Victor Stinner2f42ae52011-03-20 00:41:24 +0100966 PyObject *oldname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000967
Victor Stinner2f42ae52011-03-20 00:41:24 +0100968 if (PyUnicode_Compare(co->co_filename, newname) == 0)
969 return;
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +0000970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 oldname = co->co_filename;
972 Py_INCREF(oldname);
973 update_code_filenames(co, oldname, newname);
974 Py_DECREF(oldname);
Antoine Pitroud35cbf62009-01-06 19:02:24 +0000975}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000976
Brett Cannon442c9b92011-03-23 16:14:42 -0700977static PyObject *
978imp_fix_co_filename(PyObject *self, PyObject *args)
979{
980 PyObject *co;
981 PyObject *file_path;
982
983 if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path))
984 return NULL;
985
986 if (!PyCode_Check(co)) {
987 PyErr_SetString(PyExc_TypeError,
988 "first argument must be a code object");
989 return NULL;
990 }
991
992 if (!PyUnicode_Check(file_path)) {
993 PyErr_SetString(PyExc_TypeError,
994 "second argument must be a string");
995 return NULL;
996 }
997
998 update_compiled_module((PyCodeObject*)co, file_path);
999
1000 Py_RETURN_NONE;
1001}
1002
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003
Christian Heimes3b06e532008-01-07 20:12:44 +00001004/* Get source file -> unicode or None
1005 * Returns the path to the py file if available, else the given path
1006 */
1007static PyObject *
Victor Stinnerc9abda02011-03-14 13:33:46 -04001008get_sourcefile(PyObject *filename)
Christian Heimes3b06e532008-01-07 20:12:44 +00001009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 Py_ssize_t len;
Victor Stinnerc9abda02011-03-14 13:33:46 -04001011 PyObject *py;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 struct stat statbuf;
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001013 int err;
Victor Stinner81c39a82012-06-16 03:22:05 +02001014 void *data;
1015 unsigned int kind;
Christian Heimes3b06e532008-01-07 20:12:44 +00001016
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02001017 len = PyUnicode_GET_LENGTH(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001018 if (len == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 Py_RETURN_NONE;
Christian Heimes3b06e532008-01-07 20:12:44 +00001020
Victor Stinnerc9abda02011-03-14 13:33:46 -04001021 /* don't match *.pyc or *.pyo? */
Victor Stinner81c39a82012-06-16 03:22:05 +02001022 data = PyUnicode_DATA(filename);
1023 kind = PyUnicode_KIND(filename);
Victor Stinnerc9abda02011-03-14 13:33:46 -04001024 if (len < 5
Victor Stinner81c39a82012-06-16 03:22:05 +02001025 || PyUnicode_READ(kind, data, len-4) != '.'
1026 || (PyUnicode_READ(kind, data, len-3) != 'p'
1027 && PyUnicode_READ(kind, data, len-3) != 'P')
1028 || (PyUnicode_READ(kind, data, len-2) != 'y'
1029 && PyUnicode_READ(kind, data, len-2) != 'Y'))
Victor Stinnerc9abda02011-03-14 13:33:46 -04001030 goto unchanged;
Christian Heimes3b06e532008-01-07 20:12:44 +00001031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 /* Start by trying to turn PEP 3147 path into source path. If that
1033 * fails, just chop off the trailing character, i.e. legacy pyc path
1034 * to py.
1035 */
Victor Stinnerc9abda02011-03-14 13:33:46 -04001036 py = make_source_pathname(filename);
1037 if (py == NULL) {
1038 PyErr_Clear();
Victor Stinner81c39a82012-06-16 03:22:05 +02001039 py = PyUnicode_Substring(filename, 0, len - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001040 }
Victor Stinnerc9abda02011-03-14 13:33:46 -04001041 if (py == NULL)
1042 goto error;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001043
Victor Stinnerbd0850b2011-12-18 20:47:30 +01001044 err = _Py_stat(py, &statbuf);
1045 if (err == -2)
1046 goto error;
Victor Stinner81c39a82012-06-16 03:22:05 +02001047 if (err == 0 && S_ISREG(statbuf.st_mode))
Victor Stinnerc9abda02011-03-14 13:33:46 -04001048 return py;
1049 Py_DECREF(py);
1050 goto unchanged;
1051
1052error:
1053 PyErr_Clear();
1054unchanged:
1055 Py_INCREF(filename);
1056 return filename;
Christian Heimes3b06e532008-01-07 20:12:44 +00001057}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001059/* Forward */
Victor Stinner53dc7352011-03-20 01:50:21 +01001060static struct _frozen * find_frozen(PyObject *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001061
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001062
1063/* Helper to test for built-in module */
1064
1065static int
Victor Stinner95872862011-03-07 18:20:56 +01001066is_builtin(PyObject *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001067{
Victor Stinner95872862011-03-07 18:20:56 +01001068 int i, cmp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
Victor Stinner95872862011-03-07 18:20:56 +01001070 cmp = PyUnicode_CompareWithASCIIString(name, PyImport_Inittab[i].name);
1071 if (cmp == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 if (PyImport_Inittab[i].initfunc == NULL)
1073 return -1;
1074 else
1075 return 1;
1076 }
1077 }
1078 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001079}
1080
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001081
Just van Rossum52e14d62002-12-30 22:08:05 +00001082/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1083 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001084 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001085 that can handle the path item. Return None if no hook could;
1086 this tells our caller it should fall back to the builtin
1087 import mechanism. Cache the result in path_importer_cache.
1088 Returns a borrowed reference. */
1089
1090static PyObject *
1091get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001093{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 PyObject *importer;
1095 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 /* These conditions are the caller's responsibility: */
1098 assert(PyList_Check(path_hooks));
1099 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 nhooks = PyList_Size(path_hooks);
1102 if (nhooks < 0)
1103 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 importer = PyDict_GetItem(path_importer_cache, p);
1106 if (importer != NULL)
1107 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001108
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 /* set path_importer_cache[p] to None to avoid recursion */
1110 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1111 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 for (j = 0; j < nhooks; j++) {
1114 PyObject *hook = PyList_GetItem(path_hooks, j);
1115 if (hook == NULL)
1116 return NULL;
1117 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1118 if (importer != NULL)
1119 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1122 return NULL;
1123 }
1124 PyErr_Clear();
1125 }
1126 if (importer == NULL) {
Brett Cannonaa936422012-04-27 15:30:58 -04001127 return Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001128 }
1129 if (importer != NULL) {
1130 int err = PyDict_SetItem(path_importer_cache, p, importer);
1131 Py_DECREF(importer);
1132 if (err != 0)
1133 return NULL;
1134 }
1135 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001136}
1137
Christian Heimes9cd17752007-11-18 19:35:23 +00001138PyAPI_FUNC(PyObject *)
1139PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1143 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1144 importer = get_path_importer(path_importer_cache,
1145 path_hooks, path);
1146 }
1147 }
1148 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1149 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001150}
1151
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001152
Victor Stinner95872862011-03-07 18:20:56 +01001153static int init_builtin(PyObject *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001154
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001155/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001156 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001157 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001158
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001159static int
Victor Stinner95872862011-03-07 18:20:56 +01001160init_builtin(PyObject *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001163
Victor Stinner95872862011-03-07 18:20:56 +01001164 if (_PyImport_FindExtensionObject(name, name) != NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001165 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 for (p = PyImport_Inittab; p->name != NULL; p++) {
1168 PyObject *mod;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001169 PyModuleDef *def;
Victor Stinner95872862011-03-07 18:20:56 +01001170 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 if (p->initfunc == NULL) {
1172 PyErr_Format(PyExc_ImportError,
Victor Stinner95872862011-03-07 18:20:56 +01001173 "Cannot re-init internal module %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 name);
1175 return -1;
1176 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 mod = (*p->initfunc)();
1178 if (mod == 0)
1179 return -1;
Antoine Pitrou6c40eb72012-01-18 20:16:09 +01001180 /* Remember pointer to module init function. */
1181 def = PyModule_GetDef(mod);
1182 def->m_base.m_init = p->initfunc;
Victor Stinner95872862011-03-07 18:20:56 +01001183 if (_PyImport_FixupExtensionObject(mod, name, name) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001184 return -1;
1185 /* FixupExtension has put the module into sys.modules,
1186 so we can release our own reference. */
1187 Py_DECREF(mod);
1188 return 1;
1189 }
1190 }
1191 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001192}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001193
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001194
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001195/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001196
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001197static struct _frozen *
Victor Stinner53dc7352011-03-20 01:50:21 +01001198find_frozen(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001201
Victor Stinner53dc7352011-03-20 01:50:21 +01001202 if (name == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00001204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 for (p = PyImport_FrozenModules; ; p++) {
1206 if (p->name == NULL)
1207 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001208 if (PyUnicode_CompareWithASCIIString(name, p->name) == 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 break;
1210 }
1211 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001212}
1213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001215get_frozen_object(PyObject *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 struct _frozen *p = find_frozen(name);
1218 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 if (p == NULL) {
1221 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001222 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 name);
1224 return NULL;
1225 }
1226 if (p->code == NULL) {
1227 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001228 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001229 name);
1230 return NULL;
1231 }
1232 size = p->size;
1233 if (size < 0)
1234 size = -size;
1235 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001236}
1237
Brett Cannon8d110132009-03-15 02:20:16 +00001238static PyObject *
Victor Stinner53dc7352011-03-20 01:50:21 +01001239is_frozen_package(PyObject *name)
Brett Cannon8d110132009-03-15 02:20:16 +00001240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001241 struct _frozen *p = find_frozen(name);
1242 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00001243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001244 if (p == NULL) {
1245 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001246 "No such frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 name);
1248 return NULL;
1249 }
Brett Cannon8d110132009-03-15 02:20:16 +00001250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00001252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 if (size < 0)
1254 Py_RETURN_TRUE;
1255 else
1256 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00001257}
1258
1259
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001260/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00001261 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001262 an exception set if the initialization failed.
1263 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001264
1265int
Victor Stinner53dc7352011-03-20 01:50:21 +01001266PyImport_ImportFrozenModuleObject(PyObject *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001267{
Victor Stinner53dc7352011-03-20 01:50:21 +01001268 struct _frozen *p;
1269 PyObject *co, *m, *path;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 int ispackage;
1271 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001272
Victor Stinner53dc7352011-03-20 01:50:21 +01001273 p = find_frozen(name);
1274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 if (p == NULL)
1276 return 0;
1277 if (p->code == NULL) {
1278 PyErr_Format(PyExc_ImportError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001279 "Excluded frozen object named %R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 name);
1281 return -1;
1282 }
1283 size = p->size;
1284 ispackage = (size < 0);
1285 if (ispackage)
1286 size = -size;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1288 if (co == NULL)
1289 return -1;
1290 if (!PyCode_Check(co)) {
1291 PyErr_Format(PyExc_TypeError,
Victor Stinner53dc7352011-03-20 01:50:21 +01001292 "frozen object %R is not a code object",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 name);
1294 goto err_return;
1295 }
1296 if (ispackage) {
1297 /* Set __path__ to the package name */
Victor Stinner53dc7352011-03-20 01:50:21 +01001298 PyObject *d, *l;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 int err;
Victor Stinner53dc7352011-03-20 01:50:21 +01001300 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 if (m == NULL)
1302 goto err_return;
1303 d = PyModule_GetDict(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001304 l = PyList_New(1);
1305 if (l == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 goto err_return;
1307 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001308 Py_INCREF(name);
1309 PyList_SET_ITEM(l, 0, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 err = PyDict_SetItemString(d, "__path__", l);
1311 Py_DECREF(l);
1312 if (err != 0)
1313 goto err_return;
1314 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001315 path = PyUnicode_FromString("<frozen>");
1316 if (path == NULL)
1317 goto err_return;
1318 m = PyImport_ExecCodeModuleObject(name, co, path, NULL);
1319 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 if (m == NULL)
1321 goto err_return;
1322 Py_DECREF(co);
1323 Py_DECREF(m);
1324 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001325err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 Py_DECREF(co);
1327 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001328}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001329
Victor Stinner53dc7352011-03-20 01:50:21 +01001330int
1331PyImport_ImportFrozenModule(char *name)
1332{
1333 PyObject *nameobj;
1334 int ret;
1335 nameobj = PyUnicode_InternFromString(name);
1336 if (nameobj == NULL)
1337 return -1;
1338 ret = PyImport_ImportFrozenModuleObject(nameobj);
1339 Py_DECREF(nameobj);
1340 return ret;
1341}
1342
Guido van Rossum74e6a111994-08-29 12:54:38 +00001343
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001344/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001345 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001346
Guido van Rossum79f25d91997-04-29 20:08:16 +00001347PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001348PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001349{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 PyObject *pname;
1351 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001352
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001353 pname = PyUnicode_FromString(name);
1354 if (pname == NULL)
1355 return NULL;
1356 result = PyImport_Import(pname);
1357 Py_DECREF(pname);
1358 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001359}
1360
Christian Heimes072c0f12008-01-03 23:01:04 +00001361/* Import a module without blocking
1362 *
1363 * At first it tries to fetch the module from sys.modules. If the module was
1364 * never loaded before it loads it with PyImport_ImportModule() unless another
1365 * thread holds the import lock. In the latter case the function raises an
1366 * ImportError instead of blocking.
1367 *
1368 * Returns the module object with incremented ref count.
1369 */
1370PyObject *
1371PyImport_ImportModuleNoBlock(const char *name)
1372{
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001373 return PyImport_ImportModule(name);
Christian Heimes072c0f12008-01-03 23:01:04 +00001374}
1375
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001376
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001377PyObject *
Brett Cannonfd074152012-04-14 14:10:13 -04001378PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
1379 PyObject *locals, PyObject *given_fromlist,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001380 int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001381{
Brett Cannonfd074152012-04-14 14:10:13 -04001382 _Py_IDENTIFIER(__import__);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001383 _Py_IDENTIFIER(__initializing__);
Brett Cannonfd074152012-04-14 14:10:13 -04001384 _Py_IDENTIFIER(__package__);
1385 _Py_IDENTIFIER(__path__);
1386 _Py_IDENTIFIER(__name__);
1387 _Py_IDENTIFIER(_find_and_load);
1388 _Py_IDENTIFIER(_handle_fromlist);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001389 _Py_IDENTIFIER(_lock_unlock_module);
Brett Cannonfd074152012-04-14 14:10:13 -04001390 _Py_static_string(single_dot, ".");
1391 PyObject *abs_name = NULL;
1392 PyObject *builtins_import = NULL;
1393 PyObject *final_mod = NULL;
1394 PyObject *mod = NULL;
1395 PyObject *package = NULL;
1396 PyObject *globals = NULL;
1397 PyObject *fromlist = NULL;
1398 PyInterpreterState *interp = PyThreadState_GET()->interp;
1399
1400 /* Make sure to use default values so as to not have
1401 PyObject_CallMethodObjArgs() truncate the parameter list because of a
1402 NULL argument. */
1403 if (given_globals == NULL) {
1404 globals = PyDict_New();
1405 if (globals == NULL) {
1406 goto error;
1407 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001408 }
Brett Cannonfd074152012-04-14 14:10:13 -04001409 else {
1410 /* Only have to care what given_globals is if it will be used
1411 fortsomething. */
1412 if (level > 0 && !PyDict_Check(given_globals)) {
1413 PyErr_SetString(PyExc_TypeError, "globals must be a dict");
1414 goto error;
1415 }
1416 globals = given_globals;
1417 Py_INCREF(globals);
1418 }
1419
1420 if (given_fromlist == NULL) {
1421 fromlist = PyList_New(0);
1422 if (fromlist == NULL) {
1423 goto error;
1424 }
1425 }
1426 else {
1427 fromlist = given_fromlist;
1428 Py_INCREF(fromlist);
1429 }
1430 if (name == NULL) {
1431 PyErr_SetString(PyExc_ValueError, "Empty module name");
1432 goto error;
1433 }
1434
1435 /* The below code is importlib.__import__() & _gcd_import(), ported to C
1436 for added performance. */
1437
1438 if (!PyUnicode_Check(name)) {
1439 PyErr_SetString(PyExc_TypeError, "module name must be a string");
1440 goto error;
1441 }
1442 else if (PyUnicode_READY(name) < 0) {
1443 goto error;
1444 }
1445 if (level < 0) {
1446 PyErr_SetString(PyExc_ValueError, "level must be >= 0");
1447 goto error;
1448 }
1449 else if (level > 0) {
1450 package = _PyDict_GetItemId(globals, &PyId___package__);
1451 if (package != NULL && package != Py_None) {
1452 Py_INCREF(package);
1453 if (!PyUnicode_Check(package)) {
1454 PyErr_SetString(PyExc_TypeError, "package must be a string");
1455 goto error;
1456 }
1457 }
1458 else {
Brett Cannon273323c2012-04-17 19:05:11 -04001459 package = _PyDict_GetItemId(globals, &PyId___name__);
Brett Cannonfd074152012-04-14 14:10:13 -04001460 if (package == NULL) {
Brett Cannon273323c2012-04-17 19:05:11 -04001461 PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
Brett Cannonfd074152012-04-14 14:10:13 -04001462 goto error;
1463 }
1464 else if (!PyUnicode_Check(package)) {
1465 PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
1466 }
1467 Py_INCREF(package);
1468
1469 if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) {
Brett Cannon740fce02012-04-14 14:23:49 -04001470 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001471 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1472 if (borrowed_dot == NULL) {
1473 goto error;
1474 }
Brett Cannon740fce02012-04-14 14:23:49 -04001475 partition = PyUnicode_RPartition(package, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001476 Py_DECREF(package);
1477 if (partition == NULL) {
1478 goto error;
1479 }
1480 package = PyTuple_GET_ITEM(partition, 0);
1481 Py_INCREF(package);
1482 Py_DECREF(partition);
1483 }
1484 }
1485
1486 if (PyDict_GetItem(interp->modules, package) == NULL) {
1487 PyErr_Format(PyExc_SystemError,
1488 "Parent module %R not loaded, cannot perform relative "
1489 "import", package);
1490 goto error;
1491 }
1492 }
1493 else { /* level == 0 */
1494 if (PyUnicode_GET_LENGTH(name) == 0) {
1495 PyErr_SetString(PyExc_ValueError, "Empty module name");
1496 goto error;
1497 }
1498 package = Py_None;
1499 Py_INCREF(package);
1500 }
1501
1502 if (level > 0) {
1503 Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package);
1504 PyObject *base = NULL;
1505 int level_up = 1;
1506
1507 for (level_up = 1; level_up < level; level_up += 1) {
1508 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
1509 if (last_dot == -2) {
1510 goto error;
1511 }
1512 else if (last_dot == -1) {
1513 PyErr_SetString(PyExc_ValueError,
1514 "attempted relative import beyond top-level "
1515 "package");
1516 goto error;
1517 }
1518 }
1519 base = PyUnicode_Substring(package, 0, last_dot);
1520 if (PyUnicode_GET_LENGTH(name) > 0) {
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001521 PyObject *borrowed_dot, *seq = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001522
1523 borrowed_dot = _PyUnicode_FromId(&single_dot);
Antoine Pitrou538ba2a2012-04-16 21:52:45 +02001524 seq = PyTuple_Pack(2, base, name);
1525 Py_DECREF(base);
Brett Cannonfd074152012-04-14 14:10:13 -04001526 if (borrowed_dot == NULL || seq == NULL) {
1527 goto error;
1528 }
1529
1530 abs_name = PyUnicode_Join(borrowed_dot, seq);
1531 Py_DECREF(seq);
1532 if (abs_name == NULL) {
1533 goto error;
1534 }
1535 }
1536 else {
1537 abs_name = base;
1538 }
1539 }
1540 else {
1541 abs_name = name;
1542 Py_INCREF(abs_name);
1543 }
1544
Brian Curtine6b299f2012-04-14 14:19:33 -05001545#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001546 _PyImport_AcquireLock();
1547#endif
1548 /* From this point forward, goto error_with_unlock! */
1549 if (PyDict_Check(globals)) {
1550 builtins_import = _PyDict_GetItemId(globals, &PyId___import__);
1551 }
1552 if (builtins_import == NULL) {
1553 builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
1554 if (builtins_import == NULL) {
1555 Py_FatalError("__import__ missing");
1556 }
1557 }
1558 Py_INCREF(builtins_import);
1559
1560 mod = PyDict_GetItem(interp->modules, abs_name);
1561 if (mod == Py_None) {
Brett Cannon27fc5282012-04-15 14:15:31 -04001562 PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
1563 "None in sys.modules", abs_name);
1564 if (msg != NULL) {
Brian Curtin09b86d12012-04-17 16:57:09 -05001565 PyErr_SetImportError(msg, abs_name, NULL);
1566 Py_DECREF(msg);
Brett Cannon27fc5282012-04-15 14:15:31 -04001567 }
Antoine Pitrou71382cb2012-04-16 18:48:49 +02001568 mod = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001569 goto error_with_unlock;
1570 }
1571 else if (mod != NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001572 PyObject *value;
1573 int initializing = 0;
1574
Brett Cannonfd074152012-04-14 14:10:13 -04001575 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001576 /* Only call _bootstrap._lock_unlock_module() if __initializing__ is true. */
1577 value = _PyObject_GetAttrId(mod, &PyId___initializing__);
1578 if (value == NULL)
1579 PyErr_Clear();
1580 else {
1581 initializing = PyObject_IsTrue(value);
1582 Py_DECREF(value);
1583 if (initializing == -1)
1584 PyErr_Clear();
1585 }
1586 if (initializing > 0) {
1587 /* _bootstrap._lock_unlock_module() releases the import lock */
1588 value = _PyObject_CallMethodObjIdArgs(interp->importlib,
1589 &PyId__lock_unlock_module, abs_name,
1590 NULL);
1591 if (value == NULL)
1592 goto error;
1593 Py_DECREF(value);
1594 }
1595 else {
1596#ifdef WITH_THREAD
1597 if (_PyImport_ReleaseLock() < 0) {
1598 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1599 goto error;
1600 }
1601#endif
1602 }
Brett Cannonfd074152012-04-14 14:10:13 -04001603 }
1604 else {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001605 /* _bootstrap._find_and_load() releases the import lock */
Brett Cannonfd074152012-04-14 14:10:13 -04001606 mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1607 &PyId__find_and_load, abs_name,
1608 builtins_import, NULL);
1609 if (mod == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001610 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001611 }
1612 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001613 /* From now on we don't hold the import lock anymore. */
Brett Cannonfd074152012-04-14 14:10:13 -04001614
1615 if (PyObject_Not(fromlist)) {
1616 if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) {
1617 PyObject *front = NULL;
Brian Curtine6b299f2012-04-14 14:19:33 -05001618 PyObject *partition = NULL;
Brett Cannonfd074152012-04-14 14:10:13 -04001619 PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot);
1620
1621 if (borrowed_dot == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001622 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001623 }
1624
Brian Curtine6b299f2012-04-14 14:19:33 -05001625 partition = PyUnicode_Partition(name, borrowed_dot);
Brett Cannonfd074152012-04-14 14:10:13 -04001626 if (partition == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001627 goto error;
Brett Cannonfd074152012-04-14 14:10:13 -04001628 }
1629
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001630 if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) {
1631 /* No dot in module name, simple exit */
1632 Py_DECREF(partition);
1633 final_mod = mod;
1634 Py_INCREF(mod);
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001635 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001636 }
1637
Brett Cannonfd074152012-04-14 14:10:13 -04001638 front = PyTuple_GET_ITEM(partition, 0);
1639 Py_INCREF(front);
1640 Py_DECREF(partition);
1641
1642 if (level == 0) {
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001643 final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL);
Antoine Pitroub78174c2012-05-06 17:15:23 +02001644 Py_DECREF(front);
Brett Cannonfd074152012-04-14 14:10:13 -04001645 }
1646 else {
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001647 Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) -
1648 PyUnicode_GET_LENGTH(front);
1649 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001650 PyObject *to_return = PyUnicode_Substring(abs_name, 0,
Brett Cannonfd074152012-04-14 14:10:13 -04001651 abs_name_len - cut_off);
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001652 Py_DECREF(front);
1653 if (to_return == NULL) {
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001654 goto error;
Antoine Pitrou22a1d172012-04-16 22:06:21 +02001655 }
Brett Cannonfd074152012-04-14 14:10:13 -04001656
1657 final_mod = PyDict_GetItem(interp->modules, to_return);
Brett Cannon49f8d8b2012-04-14 21:50:00 -04001658 if (final_mod == NULL) {
1659 PyErr_Format(PyExc_KeyError,
1660 "%R not in sys.modules as expected",
1661 to_return);
1662 }
1663 else {
1664 Py_INCREF(final_mod);
1665 }
Antoine Pitroub78174c2012-05-06 17:15:23 +02001666 Py_DECREF(to_return);
Brett Cannonfd074152012-04-14 14:10:13 -04001667 }
1668 }
1669 else {
1670 final_mod = mod;
1671 Py_INCREF(mod);
1672 }
1673 }
1674 else {
1675 final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib,
1676 &PyId__handle_fromlist, mod,
1677 fromlist, builtins_import,
1678 NULL);
1679 }
Antoine Pitrouea3eb882012-05-17 18:55:59 +02001680 goto error;
Antoine Pitrou6efa50a2012-05-07 21:41:59 +02001681
Brett Cannonfd074152012-04-14 14:10:13 -04001682 error_with_unlock:
Brian Curtine6b299f2012-04-14 14:19:33 -05001683#ifdef WITH_THREAD
Brett Cannonfd074152012-04-14 14:10:13 -04001684 if (_PyImport_ReleaseLock() < 0) {
1685 PyErr_SetString(PyExc_RuntimeError, "not holding the import lock");
1686 }
1687#endif
1688 error:
1689 Py_XDECREF(abs_name);
1690 Py_XDECREF(builtins_import);
1691 Py_XDECREF(mod);
1692 Py_XDECREF(package);
1693 Py_XDECREF(globals);
1694 Py_XDECREF(fromlist);
1695 return final_mod;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001696}
1697
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001698PyObject *
Benjamin Peterson04778a82011-05-25 09:29:00 -05001699PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals,
Victor Stinnerfe93faf2011-03-14 15:54:52 -04001700 PyObject *fromlist, int level)
1701{
1702 PyObject *nameobj, *mod;
1703 nameobj = PyUnicode_FromString(name);
1704 if (nameobj == NULL)
1705 return NULL;
1706 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
1707 fromlist, level);
1708 Py_DECREF(nameobj);
1709 return mod;
1710}
1711
1712
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001713/* Re-import a module of any kind and return its module object, WITH
1714 INCREMENTED REFERENCE COUNT */
1715
Guido van Rossum79f25d91997-04-29 20:08:16 +00001716PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001717PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001718{
Brett Cannon62228db2012-04-29 14:38:11 -04001719 _Py_IDENTIFIER(reload);
1720 PyObject *reloaded_module = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001721 PyObject *modules = PyImport_GetModuleDict();
Brett Cannon62228db2012-04-29 14:38:11 -04001722 PyObject *imp = PyDict_GetItemString(modules, "imp");
1723 if (imp == NULL) {
1724 imp = PyImport_ImportModule("imp");
1725 if (imp == NULL) {
1726 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001727 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 }
Brett Cannon62228db2012-04-29 14:38:11 -04001729 else {
1730 Py_INCREF(imp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 }
Victor Stinnerad3c03b2011-03-14 09:21:33 -04001732
Brett Cannon62228db2012-04-29 14:38:11 -04001733 reloaded_module = _PyObject_CallMethodId(imp, &PyId_reload, "O", m);
1734 Py_DECREF(imp);
1735 return reloaded_module;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001736}
1737
1738
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001739/* Higher-level import emulator which emulates the "import" statement
1740 more accurately -- it invokes the __import__() function from the
1741 builtins of the current globals. This means that the import is
1742 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00001743 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00001744 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00001745 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00001746 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001747
1748PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001749PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001750{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 static PyObject *silly_list = NULL;
1752 static PyObject *builtins_str = NULL;
1753 static PyObject *import_str = NULL;
1754 PyObject *globals = NULL;
1755 PyObject *import = NULL;
1756 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001757 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001759
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 /* Initialize constant string objects */
1761 if (silly_list == NULL) {
1762 import_str = PyUnicode_InternFromString("__import__");
1763 if (import_str == NULL)
1764 return NULL;
1765 builtins_str = PyUnicode_InternFromString("__builtins__");
1766 if (builtins_str == NULL)
1767 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00001768 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 if (silly_list == NULL)
1770 return NULL;
1771 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 /* Get the builtins from current globals */
1774 globals = PyEval_GetGlobals();
1775 if (globals != NULL) {
1776 Py_INCREF(globals);
1777 builtins = PyObject_GetItem(globals, builtins_str);
1778 if (builtins == NULL)
1779 goto err;
1780 }
1781 else {
1782 /* No globals -- use standard builtins, and fake globals */
1783 builtins = PyImport_ImportModuleLevel("builtins",
1784 NULL, NULL, NULL, 0);
1785 if (builtins == NULL)
1786 return NULL;
1787 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1788 if (globals == NULL)
1789 goto err;
1790 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 /* Get the __import__ function from the builtins */
1793 if (PyDict_Check(builtins)) {
1794 import = PyObject_GetItem(builtins, import_str);
1795 if (import == NULL)
1796 PyErr_SetObject(PyExc_KeyError, import_str);
1797 }
1798 else
1799 import = PyObject_GetAttr(builtins, import_str);
1800 if (import == NULL)
1801 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001802
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00001804 Always use absolute import here.
1805 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
1807 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00001808 if (r == NULL)
1809 goto err;
1810 Py_DECREF(r);
1811
1812 modules = PyImport_GetModuleDict();
1813 r = PyDict_GetItem(modules, module_name);
1814 if (r != NULL)
1815 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001816
1817 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001818 Py_XDECREF(globals);
1819 Py_XDECREF(builtins);
1820 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00001821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001823}
1824
1825
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826/* Module 'imp' provides Python access to the primitives used for
1827 importing modules.
1828*/
1829
Guido van Rossum79f25d91997-04-29 20:08:16 +00001830static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00001831imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001832{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 buf[0] = (char) ((magic >> 0) & 0xff);
1836 buf[1] = (char) ((magic >> 8) & 0xff);
1837 buf[2] = (char) ((magic >> 16) & 0xff);
1838 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 return PyBytes_FromStringAndSize(buf, 4);
Victor Stinner3e2b7172010-11-09 09:32:19 +00001841}
Barry Warsaw28a691b2010-04-17 00:19:56 +00001842
1843static PyObject *
1844imp_get_magic(PyObject *self, PyObject *noargs)
1845{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00001847}
1848
1849static PyObject *
1850imp_get_tag(PyObject *self, PyObject *noargs)
1851{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001853}
1854
Guido van Rossum79f25d91997-04-29 20:08:16 +00001855static PyObject *
Brett Cannon2657df42012-05-04 15:20:40 -04001856imp_extension_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001857{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 PyObject *list;
Brett Cannon2657df42012-05-04 15:20:40 -04001859 const char *suffix;
1860 unsigned int index = 0;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001861
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 list = PyList_New(0);
1863 if (list == NULL)
1864 return NULL;
Brett Cannon2657df42012-05-04 15:20:40 -04001865#ifdef HAVE_DYNAMIC_LOADING
1866 while ((suffix = _PyImport_DynLoadFiletab[index])) {
1867 PyObject *item = PyUnicode_FromString(suffix);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 if (item == NULL) {
1869 Py_DECREF(list);
1870 return NULL;
1871 }
1872 if (PyList_Append(list, item) < 0) {
1873 Py_DECREF(list);
1874 Py_DECREF(item);
1875 return NULL;
1876 }
1877 Py_DECREF(item);
Brett Cannon2657df42012-05-04 15:20:40 -04001878 index += 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 }
Brett Cannon2657df42012-05-04 15:20:40 -04001880#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001882}
1883
Guido van Rossum79f25d91997-04-29 20:08:16 +00001884static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001885imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001886{
Victor Stinner95872862011-03-07 18:20:56 +01001887 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 int ret;
1889 PyObject *m;
Victor Stinner95872862011-03-07 18:20:56 +01001890 if (!PyArg_ParseTuple(args, "U:init_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001891 return NULL;
1892 ret = init_builtin(name);
1893 if (ret < 0)
1894 return NULL;
1895 if (ret == 0) {
1896 Py_INCREF(Py_None);
1897 return Py_None;
1898 }
Victor Stinner95872862011-03-07 18:20:56 +01001899 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 Py_XINCREF(m);
1901 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001902}
1903
Guido van Rossum79f25d91997-04-29 20:08:16 +00001904static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001905imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001906{
Victor Stinner53dc7352011-03-20 01:50:21 +01001907 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 int ret;
1909 PyObject *m;
Victor Stinner53dc7352011-03-20 01:50:21 +01001910 if (!PyArg_ParseTuple(args, "U:init_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 return NULL;
Victor Stinner53dc7352011-03-20 01:50:21 +01001912 ret = PyImport_ImportFrozenModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 if (ret < 0)
1914 return NULL;
1915 if (ret == 0) {
1916 Py_INCREF(Py_None);
1917 return Py_None;
1918 }
Victor Stinner53dc7352011-03-20 01:50:21 +01001919 m = PyImport_AddModuleObject(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 Py_XINCREF(m);
1921 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001922}
1923
Guido van Rossum79f25d91997-04-29 20:08:16 +00001924static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001925imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001926{
Victor Stinner53dc7352011-03-20 01:50:21 +01001927 PyObject *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001928
Victor Stinner53dc7352011-03-20 01:50:21 +01001929 if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001930 return NULL;
1931 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001932}
1933
Guido van Rossum79f25d91997-04-29 20:08:16 +00001934static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00001935imp_is_frozen_package(PyObject *self, PyObject *args)
1936{
Victor Stinner53dc7352011-03-20 01:50:21 +01001937 PyObject *name;
Brett Cannon8d110132009-03-15 02:20:16 +00001938
Victor Stinner53dc7352011-03-20 01:50:21 +01001939 if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 return NULL;
1941 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00001942}
1943
1944static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001945imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001946{
Victor Stinner95872862011-03-07 18:20:56 +01001947 PyObject *name;
1948 if (!PyArg_ParseTuple(args, "U:is_builtin", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 return NULL;
1950 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001951}
1952
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001954imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001955{
Victor Stinner53dc7352011-03-20 01:50:21 +01001956 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001957 struct _frozen *p;
Victor Stinner53dc7352011-03-20 01:50:21 +01001958 if (!PyArg_ParseTuple(args, "U:is_frozen", &name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 return NULL;
1960 p = find_frozen(name);
1961 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001962}
1963
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001964#ifdef HAVE_DYNAMIC_LOADING
1965
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001967imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001968{
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001969 PyObject *name, *pathname, *fob = NULL, *mod;
1970 FILE *fp;
1971
1972 if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic",
1973 &name, PyUnicode_FSDecoder, &pathname, &fob))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 return NULL;
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001975 if (fob != NULL) {
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001976 fp = _Py_fopen(pathname, "r");
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001977 if (fp == NULL) {
1978 Py_DECREF(pathname);
Antoine Pitrouf3a42de2012-05-04 22:40:25 +02001979 if (!PyErr_Occurred())
1980 PyErr_SetFromErrno(PyExc_IOError);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001981 return NULL;
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001982 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 }
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001984 else
1985 fp = NULL;
1986 mod = _PyImport_LoadDynamicModule(name, pathname, fp);
Victor Stinnere9ddbf62011-03-22 10:46:35 +01001987 Py_DECREF(pathname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 if (fp)
1989 fclose(fp);
Victor Stinnerfefd70c2011-03-14 15:54:07 -04001990 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001991}
1992
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001993#endif /* HAVE_DYNAMIC_LOADING */
1994
Barry Warsaw28a691b2010-04-17 00:19:56 +00001995
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001996/* Doc strings */
1997
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001998PyDoc_STRVAR(doc_imp,
Brett Cannon6f44d662012-04-15 16:08:47 -04001999"(Extremely) low-level import machinery bits as used by importlib and imp.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002000
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002001PyDoc_STRVAR(doc_get_magic,
2002"get_magic() -> string\n\
2003Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002004
Barry Warsaw28a691b2010-04-17 00:19:56 +00002005PyDoc_STRVAR(doc_get_tag,
2006"get_tag() -> string\n\
2007Return the magic tag for .pyc or .pyo files.");
2008
Brett Cannon2657df42012-05-04 15:20:40 -04002009PyDoc_STRVAR(doc_extension_suffixes,
2010"extension_suffixes() -> list of strings\n\
2011Returns the list of file suffixes used to identify extension modules.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002012
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00002013PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00002014"lock_held() -> boolean\n\
2015Return True if the import lock is currently held, else False.\n\
2016On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00002017
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002018PyDoc_STRVAR(doc_acquire_lock,
2019"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00002020Acquires the interpreter's import lock for the current thread.\n\
2021This lock should be used by import hooks to ensure thread-safety\n\
2022when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002023On platforms without threads, this function does nothing.");
2024
2025PyDoc_STRVAR(doc_release_lock,
2026"release_lock() -> None\n\
2027Release the interpreter's import lock.\n\
2028On platforms without threads, this function does nothing.");
2029
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002031 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2032 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
Brett Cannon2657df42012-05-04 15:20:40 -04002033 {"extension_suffixes", imp_extension_suffixes, METH_NOARGS,
2034 doc_extension_suffixes},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2036 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2037 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2039 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
2040 {"init_builtin", imp_init_builtin, METH_VARARGS},
2041 {"init_frozen", imp_init_frozen, METH_VARARGS},
2042 {"is_builtin", imp_is_builtin, METH_VARARGS},
2043 {"is_frozen", imp_is_frozen, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002044#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002045 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002046#endif
Brett Cannon442c9b92011-03-23 16:14:42 -07002047 {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049};
2050
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002051
Martin v. Löwis1a214512008-06-11 05:26:20 +00002052static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002053 PyModuleDef_HEAD_INIT,
Brett Cannon6f44d662012-04-15 16:08:47 -04002054 "_imp",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002055 doc_imp,
2056 0,
2057 imp_methods,
2058 NULL,
2059 NULL,
2060 NULL,
2061 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00002062};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002063
Jason Tishler6bc06ec2003-09-04 11:59:50 +00002064PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00002065PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002067 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 m = PyModule_Create(&impmodule);
2070 if (m == NULL)
2071 goto failure;
2072 d = PyModule_GetDict(m);
2073 if (d == NULL)
2074 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002076 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002077 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002078 Py_XDECREF(m);
2079 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002080}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002081
2082
Guido van Rossumb18618d2000-05-03 23:44:39 +00002083/* API for embedding applications that want to add their own entries
2084 to the table of built-in modules. This should normally be called
2085 *before* Py_Initialize(). When the table resize fails, -1 is
2086 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002087
2088 After a similar function by Just van Rossum. */
2089
2090int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002091PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002092{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 static struct _inittab *our_copy = NULL;
2094 struct _inittab *p;
2095 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* Count the number of entries in both tables */
2098 for (n = 0; newtab[n].name != NULL; n++)
2099 ;
2100 if (n == 0)
2101 return 0; /* Nothing to do */
2102 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2103 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002105 /* Allocate new memory for the combined table */
2106 p = our_copy;
2107 PyMem_RESIZE(p, struct _inittab, i+n+1);
2108 if (p == NULL)
2109 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 /* Copy the tables into the new memory */
2112 if (our_copy != PyImport_Inittab)
2113 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2114 PyImport_Inittab = our_copy = p;
2115 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002116
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002117 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002118}
2119
2120/* Shorthand to add a single entry given a name and a function */
2121
2122int
Brett Cannona826f322009-04-02 03:41:46 +00002123PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002124{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 newtab[0].name = (char *)name;
2130 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002133}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002134
2135#ifdef __cplusplus
2136}
2137#endif