blob: 8c4854712f84b910ca55023218aecf3c62cb7399 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032/* Module definition and import implementation */
33
Guido van Rossum79f25d91997-04-29 20:08:16 +000034#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036#include "node.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037#include "token.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000039#include "marshal.h"
40#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000042#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043#include "importdl.h"
Jack Jansen9c96a921995-02-15 22:57:06 +000044#ifdef macintosh
45#include "macglue.h"
46#endif
Guido van Rossumc405b7b1991-06-04 19:39:42 +000047
Guido van Rossum80bb9651996-12-05 23:27:02 +000048#ifdef HAVE_UNISTD_H
49#include <unistd.h>
50#endif
51
Guido van Rossumaee0bad1997-09-05 07:33:22 +000052/* We expect that stat exists on most systems.
53 It's confirmed on Unix, Mac and Windows.
54 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */
55#ifndef DONT_HAVE_STAT
56#define HAVE_STAT
57
58#include <sys/types.h>
59#include <sys/stat.h>
60
Guido van Rossum595d7ba1997-12-05 21:45:29 +000061#if defined(PYCC_VACPP)
62/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
63#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
64#endif
65
Guido van Rossumaee0bad1997-09-05 07:33:22 +000066#ifndef S_ISDIR
67#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
68#endif
69
70#endif
71
72
Guido van Rossum79f25d91997-04-29 20:08:16 +000073extern long PyOS_GetLastModificationTime(); /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000074
Guido van Rossum6c849691994-09-26 15:47:17 +000075/* Magic word to reject .pyc files generated by other Python versions */
Guido van Rossum7faeab31995-07-07 22:50:36 +000076/* Change for each incompatible change */
77/* The value of CR and LF is incorporated so if you ever read or write
78 a .pyc file in text mode the magic number will be wrong; also, the
79 Apple MPW compiler swaps their values, botching string constants */
80/* XXX Perhaps the magic number should be frozen and a version field
81 added to the .pyc file header? */
Guido van Rossumdd5db431997-01-17 21:06:11 +000082/* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
Guido van Rossum99d18251997-01-24 03:44:53 +000083#define MAGIC (20121 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000084
Guido van Rossum25ce5661997-08-02 03:10:38 +000085/* See _PyImport_FixupExtension() below */
86static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000087
Guido van Rossum771c6c81997-10-31 18:37:24 +000088/* This table is defined in config.c: */
89extern struct _inittab _PyImport_Inittab[];
90
91struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000092
Guido van Rossum1ae940a1995-01-02 19:04:15 +000093/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000094
95void
Guido van Rossum25ce5661997-08-02 03:10:38 +000096_PyImport_Init()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000097{
Guido van Rossum0824f631997-03-11 18:37:35 +000098 if (Py_OptimizeFlag) {
99 /* Replace ".pyc" with ".pyo" in import_filetab */
100 struct filedescr *p;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000101 for (p = _PyImport_Filetab; p->suffix != NULL; p++) {
Guido van Rossum0824f631997-03-11 18:37:35 +0000102 if (strcmp(p->suffix, ".pyc") == 0)
103 p->suffix = ".pyo";
104 }
105 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000106}
107
Guido van Rossum25ce5661997-08-02 03:10:38 +0000108void
109_PyImport_Fini()
110{
111 Py_XDECREF(extensions);
112 extensions = NULL;
113}
114
115
116/* Helper for sys */
117
118PyObject *
119PyImport_GetModuleDict()
120{
121 PyInterpreterState *interp = PyThreadState_Get()->interp;
122 if (interp->modules == NULL)
123 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
124 return interp->modules;
125}
126
Guido van Rossum3f5da241990-12-20 15:06:42 +0000127
Guido van Rossum085d2691997-08-05 02:20:51 +0000128/* Helper for PyImport_Cleanup */
129
130static void
131clear_carefully(d)
132 PyObject *d;
133{
134 /* To make the execution order of destructors for global
135 objects a bit more predictable, we first zap all objects
136 whose name starts with a single underscore, before we clear
137 the entire dictionary. We zap them by replacing them with
138 None, rather than deleting them from the dictionary, to
139 avoid rehashing the dictionary (to some extent). */
140
141 int pos;
142 PyObject *key, *value;
143
Guido van Rossum758eec01998-01-19 21:58:26 +0000144 Py_INCREF(d); /* Prevent it from being deleted recursively */
145
146 /* First, clear only names starting with a single underscore */
Guido van Rossum085d2691997-08-05 02:20:51 +0000147 pos = 0;
148 while (PyDict_Next(d, &pos, &key, &value)) {
149 if (value != Py_None && PyString_Check(key)) {
150 char *s = PyString_AsString(key);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000151 if (s[0] == '_' && s[1] != '_') {
152 if (Py_VerboseFlag > 1)
153 fprintf(stderr, "# clear[1] %s\n", s);
Guido van Rossum085d2691997-08-05 02:20:51 +0000154 PyDict_SetItem(d, key, Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000155 }
Guido van Rossum085d2691997-08-05 02:20:51 +0000156 }
157 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000158
159 /* Next, clear all names except those starting with two underscores */
160 pos = 0;
161 while (PyDict_Next(d, &pos, &key, &value)) {
162 if (value != Py_None && PyString_Check(key)) {
163 char *s = PyString_AsString(key);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000164 if (s[0] != '_' || s[1] != '_') {
165 if (Py_VerboseFlag > 1)
166 fprintf(stderr, "# clear[2] %s\n", s);
Guido van Rossum758eec01998-01-19 21:58:26 +0000167 PyDict_SetItem(d, key, Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000168 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000169 }
170 }
171
172 PyDict_Clear(d); /* Finally, clear all names */
173
174 Py_DECREF(d); /* Match INCREF at top */
Guido van Rossum085d2691997-08-05 02:20:51 +0000175}
176
Guido van Rossum758eec01998-01-19 21:58:26 +0000177
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000178/* List of names to clear in sys */
179static char* sys_deletes[] = {
180 "exc_type", "exc_value", "exc_traceback",
181 "last_type", "last_value", "last_traceback",
182 NULL
183};
184
185
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000186/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000187
Guido van Rossum3f5da241990-12-20 15:06:42 +0000188void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000189PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000190{
Guido van Rossum758eec01998-01-19 21:58:26 +0000191 int pos, ndone;
192 char *name;
193 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000194 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000195 PyObject *modules = interp->modules;
196
197 if (modules == NULL)
198 return; /* Already done */
199
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000200 /* Delete some special variables first. These are common
201 places where user values hide and people complain when their
202 destructors fail. Since the modules containing them are
203 deleted *last* of all, they would come too late in the normal
204 destruction order. Sigh. */
205
206 value = PyDict_GetItemString(modules, "__builtin__");
207 if (value != NULL && PyModule_Check(value)) {
208 dict = PyModule_GetDict(value);
209 if (Py_VerboseFlag)
210 fprintf(stderr, "# clear __builtin__._\n");
211 PyDict_SetItemString(dict, "_", Py_None);
212 }
213 value = PyDict_GetItemString(modules, "sys");
214 if (value != NULL && PyModule_Check(value)) {
215 char **p;
216 dict = PyModule_GetDict(value);
217 for (p = sys_deletes; *p != NULL; p++) {
218 if (Py_VerboseFlag)
219 fprintf(stderr, "# clear sys.%s\n", *p);
220 PyDict_SetItemString(dict, *p, Py_None);
221 }
222 }
223
Guido van Rossum758eec01998-01-19 21:58:26 +0000224 /* The special treatment of __builtin__ here is because even
225 when it's not referenced as a module, its dictionary is
226 referenced by almost every module's __builtins__. Since
227 deleting a module clears its dictionary (even if there are
228 references left to it), we need to delete the __builtin__
229 module last. Likewise, we don't delete sys until the very
230 end because it is implicitly referenced (e.g. by print).
231
232 Also note that we 'delete' modules by replacing their entry
233 in the modules dict with None, rather than really deleting
234 them; this avoids a rehash of the modules dictionary and
235 also marks them as "non existent" so they won't be
236 re-imported. */
237
238 /* First, repeatedly delete modules with a reference count of
239 one (skipping __builtin__ and sys) and delete them */
240 do {
241 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000242 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000243 while (PyDict_Next(modules, &pos, &key, &value)) {
244 if (value->ob_refcnt != 1)
245 continue;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000246 if (PyModule_Check(value)) {
Guido van Rossum758eec01998-01-19 21:58:26 +0000247 name = PyString_AsString(key);
248 dict = PyModule_GetDict(value);
249 if (strcmp(name, "__builtin__") == 0)
250 continue;
251 if (strcmp(name, "sys") == 0)
252 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000253 if (Py_VerboseFlag)
254 fprintf(stderr,
255 "# cleanup[1] %s\n", name);
Guido van Rossum758eec01998-01-19 21:58:26 +0000256 clear_carefully(dict);
257 PyDict_SetItem(modules, key, Py_None);
258 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000259 }
260 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000261 } while (ndone > 0);
262
263 /* Next, delete __main__ if it's still there */
264 value = PyDict_GetItemString(modules, "__main__");
265 if (value != NULL && PyModule_Check(value)) {
266 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000267 if (Py_VerboseFlag)
268 fprintf(stderr, "# cleanup __main__\n");
Guido van Rossum758eec01998-01-19 21:58:26 +0000269 clear_carefully(dict);
270 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000271 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000272
273 /* Next, delete all modules (still skipping __builtin__ and sys) */
274 pos = 0;
275 while (PyDict_Next(modules, &pos, &key, &value)) {
276 if (PyModule_Check(value)) {
277 name = PyString_AsString(key);
278 dict = PyModule_GetDict(value);
279 if (strcmp(name, "__builtin__") == 0)
280 continue;
281 if (strcmp(name, "sys") == 0)
282 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000283 if (Py_VerboseFlag)
284 fprintf(stderr, "# cleanup[2] %s\n", name);
Guido van Rossum758eec01998-01-19 21:58:26 +0000285 clear_carefully(dict);
286 PyDict_SetItem(modules, key, Py_None);
287 }
288 }
289
290 /* Next, delete sys and __builtin__ (in that order) */
291 value = PyDict_GetItemString(modules, "sys");
292 if (value != NULL && PyModule_Check(value)) {
293 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000294 if (Py_VerboseFlag)
295 fprintf(stderr, "# cleanup sys\n");
Guido van Rossum758eec01998-01-19 21:58:26 +0000296 clear_carefully(dict);
297 PyDict_SetItemString(modules, "sys", Py_None);
298 }
299 value = PyDict_GetItemString(modules, "__builtin__");
300 if (value != NULL && PyModule_Check(value)) {
301 dict = PyModule_GetDict(value);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000302 if (Py_VerboseFlag)
303 fprintf(stderr, "# cleanup __builtin__\n");
304 clear_carefully(dict); /* XXX Is this necessary? */
Guido van Rossum758eec01998-01-19 21:58:26 +0000305 PyDict_SetItemString(modules, "__builtin__", Py_None);
306 }
307
308 /* Finally, clear and delete the modules directory */
309 PyDict_Clear(modules);
310 interp->modules = NULL;
311 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000312}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000313
314
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000315/* Helper for pythonrun.c -- return magic number */
316
317long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000318PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000319{
320 return MAGIC;
321}
322
323
Guido van Rossum25ce5661997-08-02 03:10:38 +0000324/* Magic for extension modules (built-in as well as dynamically
325 loaded). To prevent initializing an extension module more than
326 once, we keep a static dictionary 'extensions' keyed by module name
327 (for built-in modules) or by filename (for dynamically loaded
328 modules), containing these modules. A copy od the module's
329 dictionary is stored by calling _PyImport_FixupExtension()
330 immediately after the module initialization function succeeds. A
331 copy can be retrieved from there by calling
332 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000333
Guido van Rossum79f25d91997-04-29 20:08:16 +0000334PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000335_PyImport_FixupExtension(name, filename)
336 char *name;
337 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000338{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000339 PyObject *modules, *mod, *dict, *copy;
340 if (extensions == NULL) {
341 extensions = PyDict_New();
342 if (extensions == NULL)
343 return NULL;
344 }
345 modules = PyImport_GetModuleDict();
346 mod = PyDict_GetItemString(modules, name);
347 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000348 PyErr_Format(PyExc_SystemError,
349 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000350 return NULL;
351 }
352 dict = PyModule_GetDict(mod);
353 if (dict == NULL)
354 return NULL;
355 copy = PyObject_CallMethod(dict, "copy", "");
356 if (copy == NULL)
357 return NULL;
358 PyDict_SetItemString(extensions, filename, copy);
359 Py_DECREF(copy);
360 return copy;
361}
362
363PyObject *
364_PyImport_FindExtension(name, filename)
365 char *name;
366 char *filename;
367{
368 PyObject *dict, *mod, *mdict, *result;
369 if (extensions == NULL)
370 return NULL;
371 dict = PyDict_GetItemString(extensions, filename);
372 if (dict == NULL)
373 return NULL;
374 mod = PyImport_AddModule(name);
375 if (mod == NULL)
376 return NULL;
377 mdict = PyModule_GetDict(mod);
378 if (mdict == NULL)
379 return NULL;
380 result = PyObject_CallMethod(mdict, "update", "O", dict);
381 if (result == NULL)
382 return NULL;
383 Py_DECREF(result);
384 if (Py_VerboseFlag)
385 fprintf(stderr, "import %s # previously loaded (%s)\n",
386 name, filename);
387 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000388}
389
390
391/* Get the module object corresponding to a module name.
392 First check the modules dictionary if there's one there,
393 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000394 Because the former action is most common, THIS DOES NOT RETURN A
395 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396
Guido van Rossum79f25d91997-04-29 20:08:16 +0000397PyObject *
398PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000399 char *name;
400{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000402 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000403
Guido van Rossum25ce5661997-08-02 03:10:38 +0000404 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000405 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000406 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000407 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000408 if (m == NULL)
409 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000410 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000411 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000412 return NULL;
413 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000414 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000415
416 return m;
417}
418
419
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000420/* Execute a code object in a module and return the module object
421 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000422
Guido van Rossum79f25d91997-04-29 20:08:16 +0000423PyObject *
424PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000425 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000426 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000427{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000428 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
429}
430
431PyObject *
432PyImport_ExecCodeModuleEx(name, co, pathname)
433 char *name;
434 PyObject *co;
435 char *pathname;
436{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000437 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000438 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000439
Guido van Rossum79f25d91997-04-29 20:08:16 +0000440 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000441 if (m == NULL)
442 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000443 d = PyModule_GetDict(m);
444 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
445 if (PyDict_SetItemString(d, "__builtins__",
446 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000447 return NULL;
448 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000449 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000450 v = NULL;
451 if (pathname != NULL) {
452 v = PyString_FromString(pathname);
453 if (v == NULL)
454 PyErr_Clear();
455 }
456 if (v == NULL) {
457 v = ((PyCodeObject *)co)->co_filename;
458 Py_INCREF(v);
459 }
460 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000461 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000462 Py_DECREF(v);
463
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000464 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465 if (v == NULL)
466 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000467 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000468
Guido van Rossum25ce5661997-08-02 03:10:38 +0000469 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000470 PyErr_Format(PyExc_ImportError,
471 "Loaded module %.200s not found in sys.modules",
472 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000473 return NULL;
474 }
475
Guido van Rossum79f25d91997-04-29 20:08:16 +0000476 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000477
478 return m;
479}
480
481
482/* Given a pathname for a Python source file, fill a buffer with the
483 pathname for the corresponding compiled file. Return the pathname
484 for the compiled file, or NULL if there's no space in the buffer.
485 Doesn't set an exception. */
486
487static char *
488make_compiled_pathname(pathname, buf, buflen)
489 char *pathname;
490 char *buf;
491 int buflen;
492{
493 int len;
494
495 len = strlen(pathname);
496 if (len+2 > buflen)
497 return NULL;
498 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000499 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
501 return buf;
502}
503
504
505/* Given a pathname for a Python source file, its time of last
506 modification, and a pathname for a compiled file, check whether the
507 compiled file represents the same version of the source. If so,
508 return a FILE pointer for the compiled file, positioned just after
509 the header; if not, return NULL.
510 Doesn't set an exception. */
511
512static FILE *
513check_compiled_module(pathname, mtime, cpathname)
514 char *pathname;
515 long mtime;
516 char *cpathname;
517{
518 FILE *fp;
519 long magic;
520 long pyc_mtime;
521
522 fp = fopen(cpathname, "rb");
523 if (fp == NULL)
524 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526 if (magic != MAGIC) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000527 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000528 fprintf(stderr, "# %s has bad magic\n", cpathname);
529 fclose(fp);
530 return NULL;
531 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000534 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000535 fprintf(stderr, "# %s has bad mtime\n", cpathname);
536 fclose(fp);
537 return NULL;
538 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000539 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000540 fprintf(stderr, "# %s matches %s\n", cpathname, pathname);
541 return fp;
542}
543
544
545/* Read a code object from a file and check it for validity */
546
Guido van Rossum79f25d91997-04-29 20:08:16 +0000547static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000548read_compiled_module(cpathname, fp)
549 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550 FILE *fp;
551{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000552 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553
Guido van Rossum79f25d91997-04-29 20:08:16 +0000554 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000556 if (co == NULL || !PyCode_Check(co)) {
557 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000558 PyErr_Format(PyExc_ImportError,
559 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000560 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561 return NULL;
562 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000563 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000564}
565
566
567/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000568 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000569
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571load_compiled_module(name, cpathname, fp)
572 char *name;
573 char *cpathname;
574 FILE *fp;
575{
576 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000577 PyCodeObject *co;
578 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000579
Guido van Rossum79f25d91997-04-29 20:08:16 +0000580 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000581 if (magic != MAGIC) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000582 PyErr_Format(PyExc_ImportError,
583 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000584 return NULL;
585 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000587 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588 if (co == NULL)
589 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000590 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591 fprintf(stderr, "import %s # precompiled from %s\n",
592 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000593 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595
596 return m;
597}
598
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599/* Parse a source file and return the corresponding code object */
600
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602parse_source_module(pathname, fp)
603 char *pathname;
604 FILE *fp;
605{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000606 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000607 node *n;
608
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000609 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 if (n == NULL)
611 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 co = PyNode_Compile(n, pathname);
613 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614
615 return co;
616}
617
618
619/* Write a compiled module to a file, placing the time of last
620 modification of its source into the header.
621 Errors are ignored, if a write error occurs an attempt is made to
622 remove the file. */
623
624static void
625write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000627 char *cpathname;
628 long mtime;
629{
630 FILE *fp;
631
632 fp = fopen(cpathname, "wb");
633 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000634 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635 fprintf(stderr,
636 "# can't create %s\n", cpathname);
637 return;
638 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 PyMarshal_WriteLongToFile(MAGIC, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 PyMarshal_WriteLongToFile(0L, fp);
642 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000643 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000644 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000645 fprintf(stderr, "# can't write %s\n", cpathname);
646 /* Don't keep partial file */
647 fclose(fp);
648 (void) unlink(cpathname);
649 return;
650 }
651 /* Now write the true mtime */
652 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000653 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000654 fflush(fp);
655 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000656 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000657 fprintf(stderr, "# wrote %s\n", cpathname);
658#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000659 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660#endif
661}
662
663
664/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000665 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
666 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000667
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000669load_source_module(name, pathname, fp)
670 char *name;
671 char *pathname;
672 FILE *fp;
673{
674 long mtime;
675 FILE *fpc;
676 char buf[MAXPATHLEN+1];
677 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000678 PyCodeObject *co;
679 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000680
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000681 mtime = PyOS_GetLastModificationTime(pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1);
683 if (cpathname != NULL &&
684 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000685 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000686 fclose(fpc);
687 if (co == NULL)
688 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000689 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690 fprintf(stderr, "import %s # precompiled from %s\n",
691 name, cpathname);
692 }
693 else {
694 co = parse_source_module(pathname, fp);
695 if (co == NULL)
696 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000697 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000698 fprintf(stderr, "import %s # from %s\n",
699 name, pathname);
700 write_compiled_module(co, cpathname, mtime);
701 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000702 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704
705 return m;
706}
707
708
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000709/* Forward */
710static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
711static struct filedescr *find_module Py_PROTO((char *, PyObject *,
712 char *, int, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000713static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000714
715/* Load a package and return its module object WITH INCREMENTED
716 REFERENCE COUNT */
717
718static PyObject *
719load_package(name, pathname)
720 char *name;
721 char *pathname;
722{
723 PyObject *m, *d, *file, *path;
724 int err;
725 char buf[MAXPATHLEN+1];
726 FILE *fp = NULL;
727 struct filedescr *fdp;
728
729 m = PyImport_AddModule(name);
730 if (m == NULL)
731 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000732 if (Py_VerboseFlag)
733 fprintf(stderr, "import %s # directory %s\n",
734 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000735 d = PyModule_GetDict(m);
736 file = PyString_FromString(pathname);
737 if (file == NULL)
738 return NULL;
739 path = Py_BuildValue("[O]", file);
740 if (path == NULL) {
741 Py_DECREF(file);
742 return NULL;
743 }
744 err = PyDict_SetItemString(d, "__file__", file);
745 if (err == 0)
746 err = PyDict_SetItemString(d, "__path__", path);
747 if (err != 0) {
748 m = NULL;
749 goto cleanup;
750 }
751 buf[0] = '\0';
752 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
753 if (fdp == NULL) {
754 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
755 PyErr_Clear();
756 }
757 else
758 m = NULL;
759 goto cleanup;
760 }
761 m = load_module(name, fp, buf, fdp->type);
762 if (fp != NULL)
763 fclose(fp);
764 cleanup:
765 Py_XINCREF(m);
766 Py_XDECREF(path);
767 Py_XDECREF(file);
768 return m;
769}
770
771
772/* Helper to test for built-in module */
773
774static int
775is_builtin(name)
776 char *name;
777{
778 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000779 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
780 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
781 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000782 return -1;
783 else
784 return 1;
785 }
786 }
787 return 0;
788}
789
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000790
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000791/* Search the path (default sys.path) for a module. Return the
792 corresponding filedescr struct, and (via return arguments) the
793 pathname and an open file. Return NULL if the module is not found. */
794
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000795#ifdef MS_COREDLL
796extern FILE *PyWin_FindRegisteredModule();
797#endif
798
Guido van Rossum0980bd91998-02-13 17:18:36 +0000799#ifdef CHECK_IMPORT_CASE
800static int check_case(char *, int, int, char *);
801#endif
802
Guido van Rossum197346f1997-10-31 18:38:52 +0000803static int find_init_module Py_PROTO((char *)); /* Forward */
804
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000805static struct filedescr *
806find_module(name, path, buf, buflen, p_fp)
807 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000808 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000809 /* Output parameters: */
810 char *buf;
811 int buflen;
812 FILE **p_fp;
813{
814 int i, npath, len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000815 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000816 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000817 struct stat statbuf;
818
819 if (path == NULL) {
820 if (is_builtin(name)) {
821 static struct filedescr fd = {"", "", C_BUILTIN};
822 return &fd;
823 }
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000824 if (find_frozen(name) != NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000825 static struct filedescr fd = {"", "", PY_FROZEN};
826 return &fd;
827 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000828
Guido van Rossumac279101996-08-22 23:10:58 +0000829#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000830 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
831 if (fp != NULL) {
832 *p_fp = fp;
833 return fdp;
834 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000835#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000836 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000837
838
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000839 if (path == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000840 path = PySys_GetObject("path");
841 if (path == NULL || !PyList_Check(path)) {
842 PyErr_SetString(PyExc_ImportError,
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000843 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000844 return NULL;
845 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000847 namelen = strlen(name);
848 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000849 PyObject *v = PyList_GetItem(path, i);
850 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000853 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000855 strcpy(buf, PyString_AsString(v));
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000856 if ((int)strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000857 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000858#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000859#ifdef INTERN_STRINGS
860 /*
861 ** Speedup: each sys.path item is interned, and
862 ** FindResourceModule remembers which items refer to
863 ** folders (so we don't have to bother trying to look
864 ** into them for resources).
865 */
866 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
867 v = PyList_GET_ITEM(path, i);
868#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000869 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000870 static struct filedescr resfiledescr =
871 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000872
873 return &resfiledescr;
874 }
875#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000876 if (len > 0 && buf[len-1] != SEP
877#ifdef ALTSEP
878 && buf[len-1] != ALTSEP
879#endif
880 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000881 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000882#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000883 /* see if we are searching in directory dos-8x3 */
884 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000885 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000886 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000887 for (j = 0; (ch = name[j]) && j < 8; j++)
888 if (isupper(ch))
889 buf[len++] = tolower(ch);
890 else
891 buf[len++] = ch;
892 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000893 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000894#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000895 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000896 strcpy(buf+len, name);
897 len += namelen;
898 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000899#ifdef HAVE_STAT
900 if (stat(buf, &statbuf) == 0) {
901 static struct filedescr fd = {"", "", PKG_DIRECTORY};
Guido van Rossum197346f1997-10-31 18:38:52 +0000902 if (S_ISDIR(statbuf.st_mode)) {
Guido van Rossum0980bd91998-02-13 17:18:36 +0000903 if (find_init_module(buf)) {
904#ifdef CHECK_IMPORT_CASE
905 if (!check_case(buf, len, namelen,
906 name))
907 return NULL;
908#endif
Guido van Rossum197346f1997-10-31 18:38:52 +0000909 return &fd;
Guido van Rossum0980bd91998-02-13 17:18:36 +0000910 }
Guido van Rossum197346f1997-10-31 18:38:52 +0000911 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000912 }
913#else
914 /* XXX How are you going to test for directories? */
915#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +0000916#ifdef macintosh
917 fdp = PyMac_FindModuleExtension(buf, &len, name);
918 if (fdp)
919 fp = fopen(buf, fdp->mode);
920#else
Guido van Rossum79f25d91997-04-29 20:08:16 +0000921 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000922 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 if (Py_VerboseFlag > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924 fprintf(stderr, "# trying %s\n", buf);
925 fp = fopen(buf, fdp->mode);
926 if (fp != NULL)
927 break;
928 }
Guido van Rossum741689d1997-08-12 14:53:39 +0000929#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000930 if (fp != NULL)
931 break;
932 }
933 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000934 PyErr_Format(PyExc_ImportError,
935 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936 return NULL;
937 }
Guido van Rossum0980bd91998-02-13 17:18:36 +0000938#ifdef CHECK_IMPORT_CASE
939 if (!check_case(buf, len, namelen, name)) {
940 fclose(fp);
941 return NULL;
942 }
943#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000944
945 *p_fp = fp;
946 return fdp;
947}
948
Guido van Rossum0980bd91998-02-13 17:18:36 +0000949#ifdef CHECK_IMPORT_CASE
950
951#ifdef MS_WIN32
952#include <windows.h>
953static int
954check_case(char *buf, int len, int namelen, char *name)
955{
956 WIN32_FIND_DATA data;
957 HANDLE h;
958 if (getenv("PYTHONCASEOK") != NULL)
959 return 1;
960 h = FindFirstFile(buf, &data);
961 if (h == INVALID_HANDLE_VALUE) {
962 PyErr_Format(PyExc_NameError,
963 "Can't find file for module %.100s\n(filename %.300s)",
964 name, buf);
965 return 0;
966 }
967 FindClose(h);
968 if (strncmp(data.cFileName, name, namelen) != 0) {
969 strcpy(buf+len-namelen, data.cFileName);
970 PyErr_Format(PyExc_NameError,
971 "Case mismatch for module name %.100s\n(filename %.300s)",
972 name, buf);
973 return 0;
974 }
975 return 1;
976}
977#endif /* MS_WIN32 */
978
979#ifdef macintosh
980#include <TextUtils.h>
981static int
982check_case(char *buf, int len, int namelen, char *name)
983{
984 FSSpec fss;
985 OSErr err;
986 unsigned char mybuf[MAXPATHLEN+1];
987
988 strcpy((char *)mybuf, buf);
989 c2pstr((char *)mybuf);
990 err = FSMakeFSSpec(0, 0, mybuf, &fss);
991 if (err) {
992 PyErr_Format(PyExc_NameError,
993 "Can't find file for module %.100s\n(filename %.300s)",
994 name, buf);
995 return 0;
996 }
997 p2cstr(fss.name);
998 if ( strncmp(name, (char *)fss.name, namelen) != 0 ) {
999 PyErr_Format(PyExc_NameError,
1000 "Case mismatch for module name %.100s\n(filename %.300s)",
1001 name, fss.name);
1002 return 0;
1003 }
1004 return 1;
1005}
1006#endif /* macintosh */
1007
1008#endif CHECK_IMPORT_CASE
1009
Guido van Rossum197346f1997-10-31 18:38:52 +00001010#ifdef HAVE_STAT
1011/* Helper to look for __init__.py or __init__.py[co] in potential package */
1012static int
1013find_init_module(buf)
1014 char *buf;
1015{
1016 int save_len = strlen(buf);
1017 int i = save_len;
1018 struct stat statbuf;
1019
1020 if (save_len + 13 >= MAXPATHLEN)
1021 return 0;
1022 buf[i++] = SEP;
1023 strcpy(buf+i, "__init__.py");
1024 if (stat(buf, &statbuf) == 0) {
1025 buf[save_len] = '\0';
1026 return 1;
1027 }
1028 i += strlen(buf+i);
1029 if (Py_OptimizeFlag)
1030 strcpy(buf+i, "o");
1031 else
1032 strcpy(buf+i, "c");
1033 if (stat(buf, &statbuf) == 0) {
1034 buf[save_len] = '\0';
1035 return 1;
1036 }
1037 buf[save_len] = '\0';
1038 return 0;
1039}
1040#endif /* HAVE_STAT */
1041
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001042
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001043static int init_builtin Py_PROTO((char *)); /* Forward */
1044
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001045/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001046 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047
Guido van Rossum79f25d91997-04-29 20:08:16 +00001048static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001049load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001050 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001051 FILE *fp;
1052 char *buf;
1053 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001054{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001055 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001057 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001058
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001059 /* First check that there's an open file (if we need one) */
1060 switch (type) {
1061 case PY_SOURCE:
1062 case PY_COMPILED:
1063 if (fp == NULL) {
1064 PyErr_Format(PyExc_ValueError,
1065 "file object required for import (type code %d)",
1066 type);
1067 return NULL;
1068 }
1069 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001070
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001071 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072
1073 case PY_SOURCE:
1074 m = load_source_module(name, buf, fp);
1075 break;
1076
1077 case PY_COMPILED:
1078 m = load_compiled_module(name, buf, fp);
1079 break;
1080
1081 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001082 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001083 break;
1084
Jack Jansen9c96a921995-02-15 22:57:06 +00001085#ifdef macintosh
1086 case PY_RESOURCE:
1087 m = PyMac_LoadResourceModule(name, buf);
1088 break;
1089#endif
1090
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001091 case PKG_DIRECTORY:
1092 m = load_package(name, buf);
1093 break;
1094
1095 case C_BUILTIN:
1096 case PY_FROZEN:
1097 if (type == C_BUILTIN)
1098 err = init_builtin(name);
1099 else
1100 err = PyImport_ImportFrozenModule(name);
1101 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001102 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001103 if (err == 0) {
1104 PyErr_Format(PyExc_ImportError,
1105 "Purported %s module %.200s not found",
1106 type == C_BUILTIN ?
1107 "builtin" : "frozen",
1108 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001109 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001110 }
1111 modules = PyImport_GetModuleDict();
1112 m = PyDict_GetItemString(modules, name);
1113 if (m == NULL) {
1114 PyErr_Format(
1115 PyExc_ImportError,
1116 "%s module %.200s not properly initialized",
1117 type == C_BUILTIN ?
1118 "builtin" : "frozen",
1119 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001120 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001121 }
1122 Py_INCREF(m);
1123 break;
1124
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001125 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001126 PyErr_Format(PyExc_ImportError,
1127 "Don't know how to import %.200s (type code %d)",
1128 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001129 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130
1131 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001132
1133 return m;
1134}
1135
1136
1137/* Initialize a built-in module.
1138 Return 1 for succes, 0 if the module is not found, and -1 with
1139 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001140
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001141static int
1142init_builtin(name)
1143 char *name;
1144{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001145 struct _inittab *p;
1146 PyObject *mod;
1147
1148 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1149 return 1;
1150
Guido van Rossum771c6c81997-10-31 18:37:24 +00001151 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001152 if (strcmp(name, p->name) == 0) {
1153 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001154 PyErr_Format(PyExc_ImportError,
1155 "Cannot re-init internal module %.200s",
1156 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001157 return -1;
1158 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001159 if (Py_VerboseFlag)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001160 fprintf(stderr, "import %s # builtin\n", name);
1161 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001162 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001163 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001164 if (_PyImport_FixupExtension(name, name) == NULL)
1165 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001166 return 1;
1167 }
1168 }
1169 return 0;
1170}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001171
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001172
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001173/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001174
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001175static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001176find_frozen(name)
1177 char *name;
1178{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001179 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001180
Guido van Rossum79f25d91997-04-29 20:08:16 +00001181 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001182 if (p->name == NULL)
1183 return NULL;
1184 if (strcmp(p->name, name) == 0)
1185 break;
1186 }
1187 return p;
1188}
1189
Guido van Rossum79f25d91997-04-29 20:08:16 +00001190static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001191get_frozen_object(name)
1192 char *name;
1193{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001194 struct _frozen *p = find_frozen(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001195
1196 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001197 PyErr_Format(PyExc_ImportError,
1198 "No such frozen object named %.200s",
1199 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001200 return NULL;
1201 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001202 return PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001203}
1204
1205/* Initialize a frozen module.
1206 Return 1 for succes, 0 if the module is not found, and -1 with
1207 an exception set if the initialization failed.
1208 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001209
1210int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001211PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001212 char *name;
1213{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001214 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001215 PyObject *co;
1216 PyObject *m;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001217
1218 if (p == NULL)
1219 return 0;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001220 if (Py_VerboseFlag)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001221 fprintf(stderr, "import %s # frozen\n", name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 co = PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001223 if (co == NULL)
1224 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001225 if (!PyCode_Check(co)) {
1226 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001227 PyErr_Format(PyExc_TypeError,
1228 "frozen object %.200s is not a code object",
1229 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001230 return -1;
1231 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001232 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001233 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001234 if (m == NULL)
1235 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001236 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001237 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001238}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001239
1240
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001241/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001242 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001243
Guido van Rossum79f25d91997-04-29 20:08:16 +00001244PyObject *
1245PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001246 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001247{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001248 static PyObject *fromlist = NULL;
1249 if (fromlist == NULL && strchr(name, '.') != NULL) {
1250 fromlist = Py_BuildValue("[s]", "*");
1251 if (fromlist == NULL)
1252 return NULL;
1253 }
1254 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001255}
1256
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001257/* Forward declarations for helper routines */
1258static PyObject *get_parent Py_PROTO((PyObject *globals,
1259 char *buf, int *p_buflen));
1260static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1261 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001262static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001263static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001264 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001265static PyObject * import_submodule Py_PROTO((PyObject *mod,
1266 char *name, char *fullname));
1267
1268/* The Magnum Opus of dotted-name import :-) */
1269
1270/* XXX TO DO:
1271 - Remember misses in package directories so package submodules
1272 that all import the same toplevel module don't keep hitting on the
1273 package directory first
1274*/
1275
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001276PyObject *
1277PyImport_ImportModuleEx(name, globals, locals, fromlist)
1278 char *name;
1279 PyObject *globals;
1280 PyObject *locals;
1281 PyObject *fromlist;
1282{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001283 char buf[MAXPATHLEN+1];
1284 int buflen = 0;
1285 PyObject *parent, *head, *next, *tail;
1286
1287 parent = get_parent(globals, buf, &buflen);
1288 if (parent == NULL)
1289 return NULL;
1290
1291 head = load_next(parent, Py_None, &name, buf, &buflen);
1292 if (head == NULL)
1293 return NULL;
1294
1295 tail = head;
1296 Py_INCREF(tail);
1297 while (name) {
1298 next = load_next(tail, tail, &name, buf, &buflen);
1299 Py_DECREF(tail);
1300 if (next == NULL) {
1301 Py_DECREF(head);
1302 return NULL;
1303 }
1304 tail = next;
1305 }
1306
1307 if (fromlist != NULL) {
1308 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1309 fromlist = NULL;
1310 }
1311
1312 if (fromlist == NULL) {
1313 Py_DECREF(tail);
1314 return head;
1315 }
1316
1317 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001318 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001319 Py_DECREF(tail);
1320 return NULL;
1321 }
1322
1323 return tail;
1324}
1325
1326static PyObject *
1327get_parent(globals, buf, p_buflen)
1328 PyObject *globals;
1329 char *buf;
1330 int *p_buflen;
1331{
1332 static PyObject *namestr = NULL;
1333 static PyObject *pathstr = NULL;
1334 PyObject *modname, *modpath, *modules, *parent;
1335
1336 if (globals == NULL || !PyDict_Check(globals))
1337 return Py_None;
1338
1339 if (namestr == NULL) {
1340 namestr = PyString_InternFromString("__name__");
1341 if (namestr == NULL)
1342 return NULL;
1343 }
1344 if (pathstr == NULL) {
1345 pathstr = PyString_InternFromString("__path__");
1346 if (pathstr == NULL)
1347 return NULL;
1348 }
1349
1350 *buf = '\0';
1351 *p_buflen = 0;
1352 modname = PyDict_GetItem(globals, namestr);
1353 if (modname == NULL || !PyString_Check(modname))
1354 return Py_None;
1355
1356 modpath = PyDict_GetItem(globals, pathstr);
1357 if (modpath != NULL) {
1358 int len = PyString_GET_SIZE(modname);
1359 if (len > MAXPATHLEN) {
1360 PyErr_SetString(PyExc_ValueError,
1361 "Module name too long");
1362 return NULL;
1363 }
1364 strcpy(buf, PyString_AS_STRING(modname));
1365 *p_buflen = len;
1366 }
1367 else {
1368 char *start = PyString_AS_STRING(modname);
1369 char *lastdot = strrchr(start, '.');
1370 int len;
1371 if (lastdot == NULL)
1372 return Py_None;
1373 len = lastdot - start;
1374 if (len >= MAXPATHLEN) {
1375 PyErr_SetString(PyExc_ValueError,
1376 "Module name too long");
1377 return NULL;
1378 }
1379 strncpy(buf, start, len);
1380 buf[len] = '\0';
1381 *p_buflen = len;
1382 }
1383
1384 modules = PyImport_GetModuleDict();
1385 parent = PyDict_GetItemString(modules, buf);
1386 if (parent == NULL)
1387 parent = Py_None;
1388 return parent;
1389 /* We expect, but can't guarantee, if parent != None, that:
1390 - parent.__name__ == buf
1391 - parent.__dict__ is globals
1392 If this is violated... Who cares? */
1393}
1394
1395static PyObject *
1396load_next(mod, altmod, p_name, buf, p_buflen)
1397 PyObject *mod;
1398 PyObject *altmod; /* Either None or same as mod */
1399 char **p_name;
1400 char *buf;
1401 int *p_buflen;
1402{
1403 char *name = *p_name;
1404 char *dot = strchr(name, '.');
1405 int len;
1406 char *p;
1407 PyObject *result;
1408
1409 if (dot == NULL) {
1410 *p_name = NULL;
1411 len = strlen(name);
1412 }
1413 else {
1414 *p_name = dot+1;
1415 len = dot-name;
1416 }
1417
1418 p = buf + *p_buflen;
1419 if (p != buf)
1420 *p++ = '.';
1421 if (p+len-buf >= MAXPATHLEN) {
1422 PyErr_SetString(PyExc_ValueError,
1423 "Module name too long");
1424 return NULL;
1425 }
1426 strncpy(p, name, len);
1427 p[len] = '\0';
1428 *p_buflen = p+len-buf;
1429
1430 result = import_submodule(mod, p, buf);
1431 if (result == Py_None && altmod != mod) {
1432 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001433 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001434 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001435 if (result != NULL && result != Py_None) {
1436 if (mark_miss(buf) != 0) {
1437 Py_DECREF(result);
1438 return NULL;
1439 }
1440 strncpy(buf, name, len);
1441 buf[len] = '\0';
1442 *p_buflen = len;
1443 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001444 }
1445 if (result == NULL)
1446 return NULL;
1447
1448 if (result == Py_None) {
1449 Py_DECREF(result);
1450 PyErr_Format(PyExc_ImportError,
1451 "No module named %.200s", name);
1452 return NULL;
1453 }
1454
1455 return result;
1456}
1457
1458static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001459mark_miss(name)
1460 char *name;
1461{
1462 PyObject *modules = PyImport_GetModuleDict();
1463 return PyDict_SetItemString(modules, name, Py_None);
1464}
1465
1466static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001467ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001468 PyObject *mod;
1469 PyObject *fromlist;
1470 char *buf;
1471 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001472 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001473{
1474 int i;
1475
1476 if (!PyObject_HasAttrString(mod, "__path__"))
1477 return 1;
1478
1479 for (i = 0; ; i++) {
1480 PyObject *item = PySequence_GetItem(fromlist, i);
1481 int hasit;
1482 if (item == NULL) {
1483 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1484 PyErr_Clear();
1485 return 1;
1486 }
1487 return 0;
1488 }
1489 if (!PyString_Check(item)) {
1490 PyErr_SetString(PyExc_TypeError,
1491 "Item in ``from list'' not a string");
1492 Py_DECREF(item);
1493 return 0;
1494 }
1495 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001496 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001497 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001498 /* See if the package defines __all__ */
1499 if (recursive)
1500 continue; /* Avoid endless recursion */
1501 all = PyObject_GetAttrString(mod, "__all__");
1502 if (all == NULL)
1503 PyErr_Clear();
1504 else {
1505 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1506 return 0;
1507 Py_DECREF(all);
1508 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001509 continue;
1510 }
1511 hasit = PyObject_HasAttr(mod, item);
1512 if (!hasit) {
1513 char *subname = PyString_AS_STRING(item);
1514 PyObject *submod;
1515 char *p;
1516 if (buflen + strlen(subname) >= MAXPATHLEN) {
1517 PyErr_SetString(PyExc_ValueError,
1518 "Module name too long");
1519 Py_DECREF(item);
1520 return 0;
1521 }
1522 p = buf + buflen;
1523 *p++ = '.';
1524 strcpy(p, subname);
1525 submod = import_submodule(mod, subname, buf);
1526 Py_XDECREF(submod);
1527 if (submod == NULL) {
1528 Py_DECREF(item);
1529 return 0;
1530 }
1531 }
1532 Py_DECREF(item);
1533 }
1534
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001535 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001536}
1537
1538static PyObject *
1539import_submodule(mod, subname, fullname)
1540 PyObject *mod; /* May be None */
1541 char *subname;
1542 char *fullname;
1543{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001544 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001545 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001546
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001547 /* Require:
1548 if mod == None: subname == fullname
1549 else: mod.__name__ + "." + subname == fullname
1550 */
1551
1552 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001553 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001554 }
1555 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001556 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001557 char buf[MAXPATHLEN+1];
1558 struct filedescr *fdp;
1559 FILE *fp = NULL;
1560
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001561 path = PyObject_GetAttrString(mod, "__path__");
1562 if (path == NULL)
1563 PyErr_Clear();
1564
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001565 buf[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001566 fdp = find_module(subname, path,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001567 buf, MAXPATHLEN+1, &fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001568 if (fdp == NULL) {
1569 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1570 return NULL;
1571 PyErr_Clear();
1572 Py_INCREF(Py_None);
1573 return Py_None;
1574 }
1575 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001576 if (fp)
1577 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001578 if (m != NULL && mod != Py_None) {
1579 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1580 Py_DECREF(m);
1581 m = NULL;
1582 }
1583 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001584 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001585
1586 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001587}
1588
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001589
1590/* Re-import a module of any kind and return its module object, WITH
1591 INCREMENTED REFERENCE COUNT */
1592
Guido van Rossum79f25d91997-04-29 20:08:16 +00001593PyObject *
1594PyImport_ReloadModule(m)
1595 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001596{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001597 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001598 PyObject *path = NULL;
1599 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001600 char buf[MAXPATHLEN+1];
1601 struct filedescr *fdp;
1602 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001603
Guido van Rossum79f25d91997-04-29 20:08:16 +00001604 if (m == NULL || !PyModule_Check(m)) {
1605 PyErr_SetString(PyExc_TypeError,
1606 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001607 return NULL;
1608 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001609 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001610 if (name == NULL)
1611 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001612 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001613 PyErr_Format(PyExc_ImportError,
1614 "reload(): module %.200s not in sys.modules",
1615 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001616 return NULL;
1617 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001618 subname = strrchr(name, '.');
1619 if (subname == NULL)
1620 subname = name;
1621 else {
1622 PyObject *parentname, *parent;
1623 parentname = PyString_FromStringAndSize(name, (subname-name));
1624 if (parentname == NULL)
1625 return NULL;
1626 parent = PyDict_GetItem(modules, parentname);
1627 if (parent == NULL) {
1628 PyErr_Format(PyExc_ImportError,
1629 "reload(): parent %.200s not in sys.modules",
1630 name);
1631 return NULL;
1632 }
1633 subname++;
1634 path = PyObject_GetAttrString(parent, "__path__");
1635 if (path == NULL)
1636 PyErr_Clear();
1637 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001638 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001639 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1640 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001641 if (fdp == NULL)
1642 return NULL;
1643 m = load_module(name, fp, buf, fdp->type);
1644 if (fp)
1645 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001646 return m;
1647}
1648
1649
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001650/* Higher-level import emulator which emulates the "import" statement
1651 more accurately -- it invokes the __import__() function from the
1652 builtins of the current globals. This means that the import is
1653 done using whatever import hooks are installed in the current
1654 environment, e.g. by "ni" or "rexec". */
1655
1656PyObject *
1657PyImport_Import(module_name)
1658 PyObject *module_name;
1659{
1660 static PyObject *silly_list = NULL;
1661 static PyObject *builtins_str = NULL;
1662 static PyObject *import_str = NULL;
1663 static PyObject *standard_builtins = NULL;
1664 PyObject *globals = NULL;
1665 PyObject *import = NULL;
1666 PyObject *builtins = NULL;
1667 PyObject *r = NULL;
1668
1669 /* Initialize constant string objects */
1670 if (silly_list == NULL) {
1671 import_str = PyString_InternFromString("__import__");
1672 if (import_str == NULL)
1673 return NULL;
1674 builtins_str = PyString_InternFromString("__builtins__");
1675 if (builtins_str == NULL)
1676 return NULL;
1677 silly_list = Py_BuildValue("[s]", "__doc__");
1678 if (silly_list == NULL)
1679 return NULL;
1680 }
1681
1682 /* Get the builtins from current globals */
1683 globals = PyEval_GetGlobals();
1684 if(globals != NULL) {
1685 builtins = PyObject_GetItem(globals, builtins_str);
1686 if (builtins == NULL)
1687 goto err;
1688 }
1689 else {
1690 /* No globals -- use standard builtins, and fake globals */
1691 PyErr_Clear();
1692
1693 if (standard_builtins == NULL) {
1694 standard_builtins =
1695 PyImport_ImportModule("__builtin__");
1696 if (standard_builtins == NULL)
1697 return NULL;
1698 }
1699
1700 builtins = standard_builtins;
1701 Py_INCREF(builtins);
1702 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1703 if (globals == NULL)
1704 goto err;
1705 }
1706
1707 /* Get the __import__ function from the builtins */
1708 if (PyDict_Check(builtins))
1709 import=PyObject_GetItem(builtins, import_str);
1710 else
1711 import=PyObject_GetAttr(builtins, import_str);
1712 if (import == NULL)
1713 goto err;
1714
1715 /* Call the _import__ function with the proper argument list */
1716 r = PyObject_CallFunction(import, "OOOO",
1717 module_name, globals, globals, silly_list);
1718
1719 err:
1720 Py_XDECREF(globals);
1721 Py_XDECREF(builtins);
1722 Py_XDECREF(import);
1723
1724 return r;
1725}
1726
1727
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001728/* Module 'imp' provides Python access to the primitives used for
1729 importing modules.
1730*/
1731
Guido van Rossum79f25d91997-04-29 20:08:16 +00001732static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001733imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001734 PyObject *self;
1735 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001736{
1737 char buf[4];
1738
Guido van Rossum79f25d91997-04-29 20:08:16 +00001739 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001740 return NULL;
Guido van Rossum6bf62da1997-04-11 20:37:35 +00001741 buf[0] = (char) ((MAGIC >> 0) & 0xff);
1742 buf[1] = (char) ((MAGIC >> 8) & 0xff);
1743 buf[2] = (char) ((MAGIC >> 16) & 0xff);
1744 buf[3] = (char) ((MAGIC >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001745
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747}
1748
Guido van Rossum79f25d91997-04-29 20:08:16 +00001749static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001751 PyObject *self;
1752 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001754 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001755 struct filedescr *fdp;
1756
Guido van Rossum79f25d91997-04-29 20:08:16 +00001757 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001758 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001759 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001760 if (list == NULL)
1761 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001762 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1763 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001764 fdp->suffix, fdp->mode, fdp->type);
1765 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767 return NULL;
1768 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001769 if (PyList_Append(list, item) < 0) {
1770 Py_DECREF(list);
1771 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001772 return NULL;
1773 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001774 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001775 }
1776 return list;
1777}
1778
Guido van Rossum79f25d91997-04-29 20:08:16 +00001779static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001780call_find_module(name, path)
1781 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001782 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001783{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001784 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001786 struct filedescr *fdp;
1787 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001788 FILE *fp = NULL;
1789
1790 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001791 if (path == Py_None)
1792 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001793 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
1794 if (fdp == NULL)
1795 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001796 if (fp != NULL) {
1797 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
1798 if (fob == NULL) {
1799 fclose(fp);
1800 return NULL;
1801 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001802 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001803 else {
1804 fob = Py_None;
1805 Py_INCREF(fob);
1806 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001808 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001809 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001810 return ret;
1811}
1812
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001814imp_find_module(self, args)
1815 PyObject *self;
1816 PyObject *args;
1817{
1818 char *name;
1819 PyObject *path = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001820 if (!PyArg_ParseTuple(args, "s|O", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001821 return NULL;
1822 return call_find_module(name, path);
1823}
1824
1825static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 PyObject *self;
1828 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829{
1830 char *name;
1831 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001832 PyObject *m;
1833 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 return NULL;
1835 ret = init_builtin(name);
1836 if (ret < 0)
1837 return NULL;
1838 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001839 Py_INCREF(Py_None);
1840 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001842 m = PyImport_AddModule(name);
1843 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001844 return m;
1845}
1846
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001848imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 PyObject *self;
1850 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001851{
1852 char *name;
1853 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 PyObject *m;
1855 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001857 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001858 if (ret < 0)
1859 return NULL;
1860 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001861 Py_INCREF(Py_None);
1862 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001863 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001864 m = PyImport_AddModule(name);
1865 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001866 return m;
1867}
1868
Guido van Rossum79f25d91997-04-29 20:08:16 +00001869static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001870imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001871 PyObject *self;
1872 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001873{
1874 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001875
Guido van Rossum79f25d91997-04-29 20:08:16 +00001876 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001877 return NULL;
1878 return get_frozen_object(name);
1879}
1880
Guido van Rossum79f25d91997-04-29 20:08:16 +00001881static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001882imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883 PyObject *self;
1884 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001885{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001886 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001887 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001888 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001889 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001890}
1891
Guido van Rossum79f25d91997-04-29 20:08:16 +00001892static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001893imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001894 PyObject *self;
1895 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001896{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001897 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001898 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001899 return NULL;
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001900 return PyInt_FromLong(find_frozen(name) != NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001901}
1902
1903static FILE *
1904get_file(pathname, fob, mode)
1905 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001906 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001907 char *mode;
1908{
1909 FILE *fp;
1910 if (fob == NULL) {
1911 fp = fopen(pathname, mode);
1912 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001913 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001914 }
1915 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001917 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 PyErr_SetString(PyExc_ValueError,
1919 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001920 }
1921 return fp;
1922}
1923
Guido van Rossum79f25d91997-04-29 20:08:16 +00001924static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001925imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001926 PyObject *self;
1927 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001928{
1929 char *name;
1930 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001931 PyObject *fob = NULL;
1932 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001933 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001934 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001935 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001936 return NULL;
1937 fp = get_file(pathname, fob, "rb");
1938 if (fp == NULL)
1939 return NULL;
1940 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001941 if (fob == NULL)
1942 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001943 return m;
1944}
1945
Guido van Rossum79f25d91997-04-29 20:08:16 +00001946static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001947imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001948 PyObject *self;
1949 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001950{
1951 char *name;
1952 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001953 PyObject *fob = NULL;
1954 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00001955 FILE *fp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001956 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
1957 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001959 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00001960 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001961 if (fp == NULL)
1962 return NULL;
1963 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00001965 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001966}
1967
Guido van Rossum79f25d91997-04-29 20:08:16 +00001968static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001969imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001970 PyObject *self;
1971 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972{
1973 char *name;
1974 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001975 PyObject *fob = NULL;
1976 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001977 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001978 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001980 return NULL;
1981 fp = get_file(pathname, fob, "r");
1982 if (fp == NULL)
1983 return NULL;
1984 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001985 if (fob == NULL)
1986 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001987 return m;
1988}
1989
Jack Jansen9c96a921995-02-15 22:57:06 +00001990#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00001991static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00001992imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001993 PyObject *self;
1994 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00001995{
1996 char *name;
1997 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001998 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00001999
Guido van Rossum79f25d91997-04-29 20:08:16 +00002000 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00002001 return NULL;
2002 m = PyMac_LoadResourceModule(name, pathname);
2003 return m;
2004}
2005#endif /* macintosh */
2006
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002008imp_load_module(self, args)
2009 PyObject *self;
2010 PyObject *args;
2011{
2012 char *name;
2013 PyObject *fob;
2014 char *pathname;
2015 char *suffix; /* Unused */
2016 char *mode;
2017 int type;
2018 FILE *fp;
2019
2020 if (!PyArg_ParseTuple(args, "sOs(ssi)",
2021 &name, &fob, &pathname,
2022 &suffix, &mode, &type))
2023 return NULL;
2024 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2025 PyErr_Format(PyExc_ValueError,
2026 "invalid file open mode %.200s", mode);
2027 return NULL;
2028 }
2029 if (fob == Py_None)
2030 fp = NULL;
2031 else {
2032 if (!PyFile_Check(fob)) {
2033 PyErr_SetString(PyExc_ValueError,
2034 "load_module arg#2 should be a file or None");
2035 return NULL;
2036 }
2037 fp = get_file(pathname, fob, mode);
2038 if (fp == NULL)
2039 return NULL;
2040 }
2041 return load_module(name, fp, pathname, type);
2042}
2043
2044static PyObject *
2045imp_load_package(self, args)
2046 PyObject *self;
2047 PyObject *args;
2048{
2049 char *name;
2050 char *pathname;
2051 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
2052 return NULL;
2053 return load_package(name, pathname);
2054}
2055
2056static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002057imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058 PyObject *self;
2059 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002060{
2061 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002063 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002065}
2066
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002067/* Doc strings */
2068
2069static char doc_imp[] = "\
2070This module provides the components needed to build your own\n\
2071__import__ function. Undocumented functions are obsolete.\n\
2072";
2073
2074static char doc_find_module[] = "\
2075find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2076Search for a module. If path is omitted or None, search for a\n\
2077built-in, frozen or special module and continue search in sys.path.\n\
2078The module name cannot contain '.'; to search for a submodule of a\n\
2079package, pass the submodule name and the package's __path__.\
2080";
2081
2082static char doc_load_module[] = "\
2083load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2084Load a module, given information returned by find_module().\n\
2085The module name must include the full package name, if any.\
2086";
2087
2088static char doc_get_magic[] = "\
2089get_magic() -> string\n\
2090Return the magic number for .pyc or .pyo files.\
2091";
2092
2093static char doc_get_suffixes[] = "\
2094get_suffixes() -> [(suffix, mode, type), ...]\n\
2095Return a list of (suffix, mode, type) tuples describing the files\n\
2096that find_module() looks for.\
2097";
2098
2099static char doc_new_module[] = "\
2100new_module(name) -> module\n\
2101Create a new module. Do not enter it in sys.modules.\n\
2102The module name must include the full package name, if any.\
2103";
2104
Guido van Rossum79f25d91997-04-29 20:08:16 +00002105static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002106 {"find_module", imp_find_module, 1, doc_find_module},
2107 {"get_magic", imp_get_magic, 1, doc_get_magic},
2108 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2109 {"load_module", imp_load_module, 1, doc_load_module},
2110 {"new_module", imp_new_module, 1, doc_new_module},
2111 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002112 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002113 {"init_builtin", imp_init_builtin, 1},
2114 {"init_frozen", imp_init_frozen, 1},
2115 {"is_builtin", imp_is_builtin, 1},
2116 {"is_frozen", imp_is_frozen, 1},
2117 {"load_compiled", imp_load_compiled, 1},
2118 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002119 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002120#ifdef macintosh
2121 {"load_resource", imp_load_resource, 1},
2122#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002123 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002124 {NULL, NULL} /* sentinel */
2125};
2126
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002127int
2128setint(d, name, value)
2129 PyObject *d;
2130 char *name;
2131 int value;
2132{
2133 PyObject *v;
2134 int err;
2135
2136 v = PyInt_FromLong((long)value);
2137 err = PyDict_SetItemString(d, name, v);
2138 Py_XDECREF(v);
2139 return err;
2140}
2141
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142void
2143initimp()
2144{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002145 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002146
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002147 m = Py_InitModule4("imp", imp_methods, doc_imp,
2148 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002149 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002150
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002151 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2152 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2153 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2154 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2155 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2156 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2157 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2158 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002159
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002160 failure:
2161 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002162}