blob: 224a3bcb089a66c47beac218825929339208d2f2 [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);
151 if (s[0] == '_' && s[1] != '_')
152 PyDict_SetItem(d, key, Py_None);
153 }
154 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000155
156 /* Next, clear all names except those starting with two underscores */
157 pos = 0;
158 while (PyDict_Next(d, &pos, &key, &value)) {
159 if (value != Py_None && PyString_Check(key)) {
160 char *s = PyString_AsString(key);
161 if (s[0] != '_' || s[1] != '_')
162 PyDict_SetItem(d, key, Py_None);
163 }
164 }
165
166 PyDict_Clear(d); /* Finally, clear all names */
167
168 Py_DECREF(d); /* Match INCREF at top */
Guido van Rossum085d2691997-08-05 02:20:51 +0000169}
170
Guido van Rossum758eec01998-01-19 21:58:26 +0000171
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000172/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000173
Guido van Rossum3f5da241990-12-20 15:06:42 +0000174void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000175PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000176{
Guido van Rossum758eec01998-01-19 21:58:26 +0000177 int pos, ndone;
178 char *name;
179 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000180 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000181 PyObject *modules = interp->modules;
182
183 if (modules == NULL)
184 return; /* Already done */
185
186 /* The special treatment of __builtin__ here is because even
187 when it's not referenced as a module, its dictionary is
188 referenced by almost every module's __builtins__. Since
189 deleting a module clears its dictionary (even if there are
190 references left to it), we need to delete the __builtin__
191 module last. Likewise, we don't delete sys until the very
192 end because it is implicitly referenced (e.g. by print).
193
194 Also note that we 'delete' modules by replacing their entry
195 in the modules dict with None, rather than really deleting
196 them; this avoids a rehash of the modules dictionary and
197 also marks them as "non existent" so they won't be
198 re-imported. */
199
200 /* First, repeatedly delete modules with a reference count of
201 one (skipping __builtin__ and sys) and delete them */
202 do {
203 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000205 while (PyDict_Next(modules, &pos, &key, &value)) {
206 if (value->ob_refcnt != 1)
207 continue;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000208 if (PyModule_Check(value)) {
Guido van Rossum758eec01998-01-19 21:58:26 +0000209 name = PyString_AsString(key);
210 dict = PyModule_GetDict(value);
211 if (strcmp(name, "__builtin__") == 0)
212 continue;
213 if (strcmp(name, "sys") == 0)
214 continue;
215 clear_carefully(dict);
216 PyDict_SetItem(modules, key, Py_None);
217 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000218 }
219 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000220 } while (ndone > 0);
221
222 /* Next, delete __main__ if it's still there */
223 value = PyDict_GetItemString(modules, "__main__");
224 if (value != NULL && PyModule_Check(value)) {
225 dict = PyModule_GetDict(value);
226 clear_carefully(dict);
227 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossum3f5da241990-12-20 15:06:42 +0000228 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000229
230 /* Next, delete all modules (still skipping __builtin__ and sys) */
231 pos = 0;
232 while (PyDict_Next(modules, &pos, &key, &value)) {
233 if (PyModule_Check(value)) {
234 name = PyString_AsString(key);
235 dict = PyModule_GetDict(value);
236 if (strcmp(name, "__builtin__") == 0)
237 continue;
238 if (strcmp(name, "sys") == 0)
239 continue;
240 clear_carefully(dict);
241 PyDict_SetItem(modules, key, Py_None);
242 }
243 }
244
245 /* Next, delete sys and __builtin__ (in that order) */
246 value = PyDict_GetItemString(modules, "sys");
247 if (value != NULL && PyModule_Check(value)) {
248 dict = PyModule_GetDict(value);
249 clear_carefully(dict);
250 PyDict_SetItemString(modules, "sys", Py_None);
251 }
252 value = PyDict_GetItemString(modules, "__builtin__");
253 if (value != NULL && PyModule_Check(value)) {
254 dict = PyModule_GetDict(value);
255 clear_carefully(dict);
256 PyDict_SetItemString(modules, "__builtin__", Py_None);
257 }
258
259 /* Finally, clear and delete the modules directory */
260 PyDict_Clear(modules);
261 interp->modules = NULL;
262 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000263}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000264
265
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000266/* Helper for pythonrun.c -- return magic number */
267
268long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000269PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000270{
271 return MAGIC;
272}
273
274
Guido van Rossum25ce5661997-08-02 03:10:38 +0000275/* Magic for extension modules (built-in as well as dynamically
276 loaded). To prevent initializing an extension module more than
277 once, we keep a static dictionary 'extensions' keyed by module name
278 (for built-in modules) or by filename (for dynamically loaded
279 modules), containing these modules. A copy od the module's
280 dictionary is stored by calling _PyImport_FixupExtension()
281 immediately after the module initialization function succeeds. A
282 copy can be retrieved from there by calling
283 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000284
Guido van Rossum79f25d91997-04-29 20:08:16 +0000285PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000286_PyImport_FixupExtension(name, filename)
287 char *name;
288 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000289{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000290 PyObject *modules, *mod, *dict, *copy;
291 if (extensions == NULL) {
292 extensions = PyDict_New();
293 if (extensions == NULL)
294 return NULL;
295 }
296 modules = PyImport_GetModuleDict();
297 mod = PyDict_GetItemString(modules, name);
298 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000299 PyErr_Format(PyExc_SystemError,
300 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000301 return NULL;
302 }
303 dict = PyModule_GetDict(mod);
304 if (dict == NULL)
305 return NULL;
306 copy = PyObject_CallMethod(dict, "copy", "");
307 if (copy == NULL)
308 return NULL;
309 PyDict_SetItemString(extensions, filename, copy);
310 Py_DECREF(copy);
311 return copy;
312}
313
314PyObject *
315_PyImport_FindExtension(name, filename)
316 char *name;
317 char *filename;
318{
319 PyObject *dict, *mod, *mdict, *result;
320 if (extensions == NULL)
321 return NULL;
322 dict = PyDict_GetItemString(extensions, filename);
323 if (dict == NULL)
324 return NULL;
325 mod = PyImport_AddModule(name);
326 if (mod == NULL)
327 return NULL;
328 mdict = PyModule_GetDict(mod);
329 if (mdict == NULL)
330 return NULL;
331 result = PyObject_CallMethod(mdict, "update", "O", dict);
332 if (result == NULL)
333 return NULL;
334 Py_DECREF(result);
335 if (Py_VerboseFlag)
336 fprintf(stderr, "import %s # previously loaded (%s)\n",
337 name, filename);
338 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000339}
340
341
342/* Get the module object corresponding to a module name.
343 First check the modules dictionary if there's one there,
344 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000345 Because the former action is most common, THIS DOES NOT RETURN A
346 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000347
Guido van Rossum79f25d91997-04-29 20:08:16 +0000348PyObject *
349PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000350 char *name;
351{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000352 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000353 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000354
Guido van Rossum25ce5661997-08-02 03:10:38 +0000355 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000356 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000357 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000358 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000359 if (m == NULL)
360 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000361 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000362 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000363 return NULL;
364 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000365 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000366
367 return m;
368}
369
370
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000371/* Execute a code object in a module and return the module object
372 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000373
Guido van Rossum79f25d91997-04-29 20:08:16 +0000374PyObject *
375PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000376 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000377 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000378{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000379 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000380 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000381
Guido van Rossum79f25d91997-04-29 20:08:16 +0000382 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000383 if (m == NULL)
384 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000385 d = PyModule_GetDict(m);
386 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
387 if (PyDict_SetItemString(d, "__builtins__",
388 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000389 return NULL;
390 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000391 /* Remember the filename as the __file__ attribute */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000392 if (PyDict_SetItemString(d, "__file__",
393 ((PyCodeObject *)co)->co_filename) != 0)
394 PyErr_Clear(); /* Not important enough to report */
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000395 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396 if (v == NULL)
397 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000398 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000399
Guido van Rossum25ce5661997-08-02 03:10:38 +0000400 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000401 PyErr_Format(PyExc_ImportError,
402 "Loaded module %.200s not found in sys.modules",
403 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000404 return NULL;
405 }
406
Guido van Rossum79f25d91997-04-29 20:08:16 +0000407 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000408
409 return m;
410}
411
412
413/* Given a pathname for a Python source file, fill a buffer with the
414 pathname for the corresponding compiled file. Return the pathname
415 for the compiled file, or NULL if there's no space in the buffer.
416 Doesn't set an exception. */
417
418static char *
419make_compiled_pathname(pathname, buf, buflen)
420 char *pathname;
421 char *buf;
422 int buflen;
423{
424 int len;
425
426 len = strlen(pathname);
427 if (len+2 > buflen)
428 return NULL;
429 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000430 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000431
432 return buf;
433}
434
435
436/* Given a pathname for a Python source file, its time of last
437 modification, and a pathname for a compiled file, check whether the
438 compiled file represents the same version of the source. If so,
439 return a FILE pointer for the compiled file, positioned just after
440 the header; if not, return NULL.
441 Doesn't set an exception. */
442
443static FILE *
444check_compiled_module(pathname, mtime, cpathname)
445 char *pathname;
446 long mtime;
447 char *cpathname;
448{
449 FILE *fp;
450 long magic;
451 long pyc_mtime;
452
453 fp = fopen(cpathname, "rb");
454 if (fp == NULL)
455 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457 if (magic != MAGIC) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000459 fprintf(stderr, "# %s has bad magic\n", cpathname);
460 fclose(fp);
461 return NULL;
462 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000466 fprintf(stderr, "# %s has bad mtime\n", cpathname);
467 fclose(fp);
468 return NULL;
469 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000470 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000471 fprintf(stderr, "# %s matches %s\n", cpathname, pathname);
472 return fp;
473}
474
475
476/* Read a code object from a file and check it for validity */
477
Guido van Rossum79f25d91997-04-29 20:08:16 +0000478static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000479read_compiled_module(cpathname, fp)
480 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000481 FILE *fp;
482{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000483 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000484
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 if (co == NULL || !PyCode_Check(co)) {
488 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000489 PyErr_Format(PyExc_ImportError,
490 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000491 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000492 return NULL;
493 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000494 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000495}
496
497
498/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000499 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Guido van Rossum79f25d91997-04-29 20:08:16 +0000501static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502load_compiled_module(name, cpathname, fp)
503 char *name;
504 char *cpathname;
505 FILE *fp;
506{
507 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000508 PyCodeObject *co;
509 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000510
Guido van Rossum79f25d91997-04-29 20:08:16 +0000511 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000512 if (magic != MAGIC) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000513 PyErr_Format(PyExc_ImportError,
514 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000515 return NULL;
516 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000517 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000518 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519 if (co == NULL)
520 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000521 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000522 fprintf(stderr, "import %s # precompiled from %s\n",
523 name, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000524 m = PyImport_ExecCodeModule(name, (PyObject *)co);
525 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
527 return m;
528}
529
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530/* Parse a source file and return the corresponding code object */
531
Guido van Rossum79f25d91997-04-29 20:08:16 +0000532static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000533parse_source_module(pathname, fp)
534 char *pathname;
535 FILE *fp;
536{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000537 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538 node *n;
539
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000540 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000541 if (n == NULL)
542 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000543 co = PyNode_Compile(n, pathname);
544 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000545
546 return co;
547}
548
549
550/* Write a compiled module to a file, placing the time of last
551 modification of its source into the header.
552 Errors are ignored, if a write error occurs an attempt is made to
553 remove the file. */
554
555static void
556write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000557 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000558 char *cpathname;
559 long mtime;
560{
561 FILE *fp;
562
563 fp = fopen(cpathname, "wb");
564 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000565 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000566 fprintf(stderr,
567 "# can't create %s\n", cpathname);
568 return;
569 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000570 PyMarshal_WriteLongToFile(MAGIC, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000572 PyMarshal_WriteLongToFile(0L, fp);
573 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000574 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000575 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000576 fprintf(stderr, "# can't write %s\n", cpathname);
577 /* Don't keep partial file */
578 fclose(fp);
579 (void) unlink(cpathname);
580 return;
581 }
582 /* Now write the true mtime */
583 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000584 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 fflush(fp);
586 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000587 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000588 fprintf(stderr, "# wrote %s\n", cpathname);
589#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000590 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000591#endif
592}
593
594
595/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000596 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
597 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000598
Guido van Rossum79f25d91997-04-29 20:08:16 +0000599static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000600load_source_module(name, pathname, fp)
601 char *name;
602 char *pathname;
603 FILE *fp;
604{
605 long mtime;
606 FILE *fpc;
607 char buf[MAXPATHLEN+1];
608 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 PyCodeObject *co;
610 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000612 mtime = PyOS_GetLastModificationTime(pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1);
614 if (cpathname != NULL &&
615 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000616 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000617 fclose(fpc);
618 if (co == NULL)
619 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000620 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621 fprintf(stderr, "import %s # precompiled from %s\n",
622 name, cpathname);
623 }
624 else {
625 co = parse_source_module(pathname, fp);
626 if (co == NULL)
627 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 if (Py_VerboseFlag)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000629 fprintf(stderr, "import %s # from %s\n",
630 name, pathname);
631 write_compiled_module(co, cpathname, mtime);
632 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000633 m = PyImport_ExecCodeModule(name, (PyObject *)co);
634 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000635
636 return m;
637}
638
639
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000640/* Forward */
641static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
642static struct filedescr *find_module Py_PROTO((char *, PyObject *,
643 char *, int, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000644static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000645
646/* Load a package and return its module object WITH INCREMENTED
647 REFERENCE COUNT */
648
649static PyObject *
650load_package(name, pathname)
651 char *name;
652 char *pathname;
653{
654 PyObject *m, *d, *file, *path;
655 int err;
656 char buf[MAXPATHLEN+1];
657 FILE *fp = NULL;
658 struct filedescr *fdp;
659
660 m = PyImport_AddModule(name);
661 if (m == NULL)
662 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000663 if (Py_VerboseFlag)
664 fprintf(stderr, "import %s # directory %s\n",
665 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000666 d = PyModule_GetDict(m);
667 file = PyString_FromString(pathname);
668 if (file == NULL)
669 return NULL;
670 path = Py_BuildValue("[O]", file);
671 if (path == NULL) {
672 Py_DECREF(file);
673 return NULL;
674 }
675 err = PyDict_SetItemString(d, "__file__", file);
676 if (err == 0)
677 err = PyDict_SetItemString(d, "__path__", path);
678 if (err != 0) {
679 m = NULL;
680 goto cleanup;
681 }
682 buf[0] = '\0';
683 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
684 if (fdp == NULL) {
685 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
686 PyErr_Clear();
687 }
688 else
689 m = NULL;
690 goto cleanup;
691 }
692 m = load_module(name, fp, buf, fdp->type);
693 if (fp != NULL)
694 fclose(fp);
695 cleanup:
696 Py_XINCREF(m);
697 Py_XDECREF(path);
698 Py_XDECREF(file);
699 return m;
700}
701
702
703/* Helper to test for built-in module */
704
705static int
706is_builtin(name)
707 char *name;
708{
709 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000710 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
711 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
712 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000713 return -1;
714 else
715 return 1;
716 }
717 }
718 return 0;
719}
720
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000721
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722/* Search the path (default sys.path) for a module. Return the
723 corresponding filedescr struct, and (via return arguments) the
724 pathname and an open file. Return NULL if the module is not found. */
725
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000726#ifdef MS_COREDLL
727extern FILE *PyWin_FindRegisteredModule();
728#endif
729
Guido van Rossum197346f1997-10-31 18:38:52 +0000730static int find_init_module Py_PROTO((char *)); /* Forward */
731
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000732static struct filedescr *
733find_module(name, path, buf, buflen, p_fp)
734 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000735 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736 /* Output parameters: */
737 char *buf;
738 int buflen;
739 FILE **p_fp;
740{
741 int i, npath, len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000742 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000743 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000744 struct stat statbuf;
745
746 if (path == NULL) {
747 if (is_builtin(name)) {
748 static struct filedescr fd = {"", "", C_BUILTIN};
749 return &fd;
750 }
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000751 if (find_frozen(name) != NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000752 static struct filedescr fd = {"", "", PY_FROZEN};
753 return &fd;
754 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755
Guido van Rossumac279101996-08-22 23:10:58 +0000756#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000757 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
758 if (fp != NULL) {
759 *p_fp = fp;
760 return fdp;
761 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000762#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000763 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000764
765
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000766 if (path == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000767 path = PySys_GetObject("path");
768 if (path == NULL || !PyList_Check(path)) {
769 PyErr_SetString(PyExc_ImportError,
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000770 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000771 return NULL;
772 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000773 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 namelen = strlen(name);
775 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000776 PyObject *v = PyList_GetItem(path, i);
777 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000778 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000779 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000780 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000781 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000782 strcpy(buf, PyString_AsString(v));
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000783 if ((int)strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000784 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000785#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000786#ifdef INTERN_STRINGS
787 /*
788 ** Speedup: each sys.path item is interned, and
789 ** FindResourceModule remembers which items refer to
790 ** folders (so we don't have to bother trying to look
791 ** into them for resources).
792 */
793 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
794 v = PyList_GET_ITEM(path, i);
795#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000796 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000797 static struct filedescr resfiledescr =
798 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000799
800 return &resfiledescr;
801 }
802#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000803 if (len > 0 && buf[len-1] != SEP
804#ifdef ALTSEP
805 && buf[len-1] != ALTSEP
806#endif
807 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000808 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000809#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000810 /* see if we are searching in directory dos-8x3 */
811 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000812 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000813 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000814 for (j = 0; (ch = name[j]) && j < 8; j++)
815 if (isupper(ch))
816 buf[len++] = tolower(ch);
817 else
818 buf[len++] = ch;
819 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000820 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000821#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000822 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000823 strcpy(buf+len, name);
824 len += namelen;
825 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000826#ifdef HAVE_STAT
827 if (stat(buf, &statbuf) == 0) {
828 static struct filedescr fd = {"", "", PKG_DIRECTORY};
Guido van Rossum197346f1997-10-31 18:38:52 +0000829 if (S_ISDIR(statbuf.st_mode)) {
830 if (find_init_module(buf))
831 return &fd;
832 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000833 }
834#else
835 /* XXX How are you going to test for directories? */
836#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +0000837#ifdef macintosh
838 fdp = PyMac_FindModuleExtension(buf, &len, name);
839 if (fdp)
840 fp = fopen(buf, fdp->mode);
841#else
Guido van Rossum79f25d91997-04-29 20:08:16 +0000842 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000843 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000844 if (Py_VerboseFlag > 1)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000845 fprintf(stderr, "# trying %s\n", buf);
846 fp = fopen(buf, fdp->mode);
847 if (fp != NULL)
848 break;
849 }
Guido van Rossum741689d1997-08-12 14:53:39 +0000850#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000851 if (fp != NULL)
852 break;
853 }
854 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000855 PyErr_Format(PyExc_ImportError,
856 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000857 return NULL;
858 }
859
860 *p_fp = fp;
861 return fdp;
862}
863
Guido van Rossum197346f1997-10-31 18:38:52 +0000864#ifdef HAVE_STAT
865/* Helper to look for __init__.py or __init__.py[co] in potential package */
866static int
867find_init_module(buf)
868 char *buf;
869{
870 int save_len = strlen(buf);
871 int i = save_len;
872 struct stat statbuf;
873
874 if (save_len + 13 >= MAXPATHLEN)
875 return 0;
876 buf[i++] = SEP;
877 strcpy(buf+i, "__init__.py");
878 if (stat(buf, &statbuf) == 0) {
879 buf[save_len] = '\0';
880 return 1;
881 }
882 i += strlen(buf+i);
883 if (Py_OptimizeFlag)
884 strcpy(buf+i, "o");
885 else
886 strcpy(buf+i, "c");
887 if (stat(buf, &statbuf) == 0) {
888 buf[save_len] = '\0';
889 return 1;
890 }
891 buf[save_len] = '\0';
892 return 0;
893}
894#endif /* HAVE_STAT */
895
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000896
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000897static int init_builtin Py_PROTO((char *)); /* Forward */
898
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000900 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000901
Guido van Rossum79f25d91997-04-29 20:08:16 +0000902static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000903load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000904 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000905 FILE *fp;
906 char *buf;
907 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000908{
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000909 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000910 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000911 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000913 /* First check that there's an open file (if we need one) */
914 switch (type) {
915 case PY_SOURCE:
916 case PY_COMPILED:
917 if (fp == NULL) {
918 PyErr_Format(PyExc_ValueError,
919 "file object required for import (type code %d)",
920 type);
921 return NULL;
922 }
923 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000924
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000925 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926
927 case PY_SOURCE:
928 m = load_source_module(name, buf, fp);
929 break;
930
931 case PY_COMPILED:
932 m = load_compiled_module(name, buf, fp);
933 break;
934
935 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +0000936 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000937 break;
938
Jack Jansen9c96a921995-02-15 22:57:06 +0000939#ifdef macintosh
940 case PY_RESOURCE:
941 m = PyMac_LoadResourceModule(name, buf);
942 break;
943#endif
944
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000945 case PKG_DIRECTORY:
946 m = load_package(name, buf);
947 break;
948
949 case C_BUILTIN:
950 case PY_FROZEN:
951 if (type == C_BUILTIN)
952 err = init_builtin(name);
953 else
954 err = PyImport_ImportFrozenModule(name);
955 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000956 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000957 if (err == 0) {
958 PyErr_Format(PyExc_ImportError,
959 "Purported %s module %.200s not found",
960 type == C_BUILTIN ?
961 "builtin" : "frozen",
962 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000963 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000964 }
965 modules = PyImport_GetModuleDict();
966 m = PyDict_GetItemString(modules, name);
967 if (m == NULL) {
968 PyErr_Format(
969 PyExc_ImportError,
970 "%s module %.200s not properly initialized",
971 type == C_BUILTIN ?
972 "builtin" : "frozen",
973 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000974 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000975 }
976 Py_INCREF(m);
977 break;
978
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000979 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 PyErr_Format(PyExc_ImportError,
981 "Don't know how to import %.200s (type code %d)",
982 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000983 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000984
985 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000986
987 return m;
988}
989
990
991/* Initialize a built-in module.
992 Return 1 for succes, 0 if the module is not found, and -1 with
993 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000994
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000995static int
996init_builtin(name)
997 char *name;
998{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000999 struct _inittab *p;
1000 PyObject *mod;
1001
1002 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1003 return 1;
1004
Guido van Rossum771c6c81997-10-31 18:37:24 +00001005 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001006 if (strcmp(name, p->name) == 0) {
1007 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001008 PyErr_Format(PyExc_ImportError,
1009 "Cannot re-init internal module %.200s",
1010 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001011 return -1;
1012 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 if (Py_VerboseFlag)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001014 fprintf(stderr, "import %s # builtin\n", name);
1015 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001016 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001017 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001018 if (_PyImport_FixupExtension(name, name) == NULL)
1019 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001020 return 1;
1021 }
1022 }
1023 return 0;
1024}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001025
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001026
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001027/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001029static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001030find_frozen(name)
1031 char *name;
1032{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001033 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001034
Guido van Rossum79f25d91997-04-29 20:08:16 +00001035 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001036 if (p->name == NULL)
1037 return NULL;
1038 if (strcmp(p->name, name) == 0)
1039 break;
1040 }
1041 return p;
1042}
1043
Guido van Rossum79f25d91997-04-29 20:08:16 +00001044static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001045get_frozen_object(name)
1046 char *name;
1047{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001048 struct _frozen *p = find_frozen(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001049
1050 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001051 PyErr_Format(PyExc_ImportError,
1052 "No such frozen object named %.200s",
1053 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001054 return NULL;
1055 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001056 return PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001057}
1058
1059/* Initialize a frozen module.
1060 Return 1 for succes, 0 if the module is not found, and -1 with
1061 an exception set if the initialization failed.
1062 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001063
1064int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001065PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001066 char *name;
1067{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001068 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001069 PyObject *co;
1070 PyObject *m;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001071
1072 if (p == NULL)
1073 return 0;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074 if (Py_VerboseFlag)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001075 fprintf(stderr, "import %s # frozen\n", name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001076 co = PyMarshal_ReadObjectFromString((char *)p->code, p->size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001077 if (co == NULL)
1078 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001079 if (!PyCode_Check(co)) {
1080 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001081 PyErr_Format(PyExc_TypeError,
1082 "frozen object %.200s is not a code object",
1083 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001084 return -1;
1085 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001086 m = PyImport_ExecCodeModule(name, co);
1087 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001088 if (m == NULL)
1089 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001090 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001091 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001092}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001093
1094
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001095/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001096 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001097
Guido van Rossum79f25d91997-04-29 20:08:16 +00001098PyObject *
1099PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001100 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001101{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001102 static PyObject *fromlist = NULL;
1103 if (fromlist == NULL && strchr(name, '.') != NULL) {
1104 fromlist = Py_BuildValue("[s]", "*");
1105 if (fromlist == NULL)
1106 return NULL;
1107 }
1108 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001109}
1110
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001111/* Forward declarations for helper routines */
1112static PyObject *get_parent Py_PROTO((PyObject *globals,
1113 char *buf, int *p_buflen));
1114static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1115 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001116static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001117static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001118 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001119static PyObject * import_submodule Py_PROTO((PyObject *mod,
1120 char *name, char *fullname));
1121
1122/* The Magnum Opus of dotted-name import :-) */
1123
1124/* XXX TO DO:
1125 - Remember misses in package directories so package submodules
1126 that all import the same toplevel module don't keep hitting on the
1127 package directory first
1128*/
1129
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001130PyObject *
1131PyImport_ImportModuleEx(name, globals, locals, fromlist)
1132 char *name;
1133 PyObject *globals;
1134 PyObject *locals;
1135 PyObject *fromlist;
1136{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001137 char buf[MAXPATHLEN+1];
1138 int buflen = 0;
1139 PyObject *parent, *head, *next, *tail;
1140
1141 parent = get_parent(globals, buf, &buflen);
1142 if (parent == NULL)
1143 return NULL;
1144
1145 head = load_next(parent, Py_None, &name, buf, &buflen);
1146 if (head == NULL)
1147 return NULL;
1148
1149 tail = head;
1150 Py_INCREF(tail);
1151 while (name) {
1152 next = load_next(tail, tail, &name, buf, &buflen);
1153 Py_DECREF(tail);
1154 if (next == NULL) {
1155 Py_DECREF(head);
1156 return NULL;
1157 }
1158 tail = next;
1159 }
1160
1161 if (fromlist != NULL) {
1162 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1163 fromlist = NULL;
1164 }
1165
1166 if (fromlist == NULL) {
1167 Py_DECREF(tail);
1168 return head;
1169 }
1170
1171 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001172 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001173 Py_DECREF(tail);
1174 return NULL;
1175 }
1176
1177 return tail;
1178}
1179
1180static PyObject *
1181get_parent(globals, buf, p_buflen)
1182 PyObject *globals;
1183 char *buf;
1184 int *p_buflen;
1185{
1186 static PyObject *namestr = NULL;
1187 static PyObject *pathstr = NULL;
1188 PyObject *modname, *modpath, *modules, *parent;
1189
1190 if (globals == NULL || !PyDict_Check(globals))
1191 return Py_None;
1192
1193 if (namestr == NULL) {
1194 namestr = PyString_InternFromString("__name__");
1195 if (namestr == NULL)
1196 return NULL;
1197 }
1198 if (pathstr == NULL) {
1199 pathstr = PyString_InternFromString("__path__");
1200 if (pathstr == NULL)
1201 return NULL;
1202 }
1203
1204 *buf = '\0';
1205 *p_buflen = 0;
1206 modname = PyDict_GetItem(globals, namestr);
1207 if (modname == NULL || !PyString_Check(modname))
1208 return Py_None;
1209
1210 modpath = PyDict_GetItem(globals, pathstr);
1211 if (modpath != NULL) {
1212 int len = PyString_GET_SIZE(modname);
1213 if (len > MAXPATHLEN) {
1214 PyErr_SetString(PyExc_ValueError,
1215 "Module name too long");
1216 return NULL;
1217 }
1218 strcpy(buf, PyString_AS_STRING(modname));
1219 *p_buflen = len;
1220 }
1221 else {
1222 char *start = PyString_AS_STRING(modname);
1223 char *lastdot = strrchr(start, '.');
1224 int len;
1225 if (lastdot == NULL)
1226 return Py_None;
1227 len = lastdot - start;
1228 if (len >= MAXPATHLEN) {
1229 PyErr_SetString(PyExc_ValueError,
1230 "Module name too long");
1231 return NULL;
1232 }
1233 strncpy(buf, start, len);
1234 buf[len] = '\0';
1235 *p_buflen = len;
1236 }
1237
1238 modules = PyImport_GetModuleDict();
1239 parent = PyDict_GetItemString(modules, buf);
1240 if (parent == NULL)
1241 parent = Py_None;
1242 return parent;
1243 /* We expect, but can't guarantee, if parent != None, that:
1244 - parent.__name__ == buf
1245 - parent.__dict__ is globals
1246 If this is violated... Who cares? */
1247}
1248
1249static PyObject *
1250load_next(mod, altmod, p_name, buf, p_buflen)
1251 PyObject *mod;
1252 PyObject *altmod; /* Either None or same as mod */
1253 char **p_name;
1254 char *buf;
1255 int *p_buflen;
1256{
1257 char *name = *p_name;
1258 char *dot = strchr(name, '.');
1259 int len;
1260 char *p;
1261 PyObject *result;
1262
1263 if (dot == NULL) {
1264 *p_name = NULL;
1265 len = strlen(name);
1266 }
1267 else {
1268 *p_name = dot+1;
1269 len = dot-name;
1270 }
1271
1272 p = buf + *p_buflen;
1273 if (p != buf)
1274 *p++ = '.';
1275 if (p+len-buf >= MAXPATHLEN) {
1276 PyErr_SetString(PyExc_ValueError,
1277 "Module name too long");
1278 return NULL;
1279 }
1280 strncpy(p, name, len);
1281 p[len] = '\0';
1282 *p_buflen = p+len-buf;
1283
1284 result = import_submodule(mod, p, buf);
1285 if (result == Py_None && altmod != mod) {
1286 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001287 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001288 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001289 if (result != NULL && result != Py_None) {
1290 if (mark_miss(buf) != 0) {
1291 Py_DECREF(result);
1292 return NULL;
1293 }
1294 strncpy(buf, name, len);
1295 buf[len] = '\0';
1296 *p_buflen = len;
1297 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001298 }
1299 if (result == NULL)
1300 return NULL;
1301
1302 if (result == Py_None) {
1303 Py_DECREF(result);
1304 PyErr_Format(PyExc_ImportError,
1305 "No module named %.200s", name);
1306 return NULL;
1307 }
1308
1309 return result;
1310}
1311
1312static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001313mark_miss(name)
1314 char *name;
1315{
1316 PyObject *modules = PyImport_GetModuleDict();
1317 return PyDict_SetItemString(modules, name, Py_None);
1318}
1319
1320static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001321ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001322 PyObject *mod;
1323 PyObject *fromlist;
1324 char *buf;
1325 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001326 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001327{
1328 int i;
1329
1330 if (!PyObject_HasAttrString(mod, "__path__"))
1331 return 1;
1332
1333 for (i = 0; ; i++) {
1334 PyObject *item = PySequence_GetItem(fromlist, i);
1335 int hasit;
1336 if (item == NULL) {
1337 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1338 PyErr_Clear();
1339 return 1;
1340 }
1341 return 0;
1342 }
1343 if (!PyString_Check(item)) {
1344 PyErr_SetString(PyExc_TypeError,
1345 "Item in ``from list'' not a string");
1346 Py_DECREF(item);
1347 return 0;
1348 }
1349 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001350 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001351 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001352 /* See if the package defines __all__ */
1353 if (recursive)
1354 continue; /* Avoid endless recursion */
1355 all = PyObject_GetAttrString(mod, "__all__");
1356 if (all == NULL)
1357 PyErr_Clear();
1358 else {
1359 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1360 return 0;
1361 Py_DECREF(all);
1362 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001363 continue;
1364 }
1365 hasit = PyObject_HasAttr(mod, item);
1366 if (!hasit) {
1367 char *subname = PyString_AS_STRING(item);
1368 PyObject *submod;
1369 char *p;
1370 if (buflen + strlen(subname) >= MAXPATHLEN) {
1371 PyErr_SetString(PyExc_ValueError,
1372 "Module name too long");
1373 Py_DECREF(item);
1374 return 0;
1375 }
1376 p = buf + buflen;
1377 *p++ = '.';
1378 strcpy(p, subname);
1379 submod = import_submodule(mod, subname, buf);
1380 Py_XDECREF(submod);
1381 if (submod == NULL) {
1382 Py_DECREF(item);
1383 return 0;
1384 }
1385 }
1386 Py_DECREF(item);
1387 }
1388
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001389 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001390}
1391
1392static PyObject *
1393import_submodule(mod, subname, fullname)
1394 PyObject *mod; /* May be None */
1395 char *subname;
1396 char *fullname;
1397{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001398 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001400
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001401 /* Require:
1402 if mod == None: subname == fullname
1403 else: mod.__name__ + "." + subname == fullname
1404 */
1405
1406 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001407 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001408 }
1409 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001410 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001411 char buf[MAXPATHLEN+1];
1412 struct filedescr *fdp;
1413 FILE *fp = NULL;
1414
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001415 path = PyObject_GetAttrString(mod, "__path__");
1416 if (path == NULL)
1417 PyErr_Clear();
1418
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001419 buf[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001420 fdp = find_module(subname, path,
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001421 buf, MAXPATHLEN+1, &fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001422 if (fdp == NULL) {
1423 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1424 return NULL;
1425 PyErr_Clear();
1426 Py_INCREF(Py_None);
1427 return Py_None;
1428 }
1429 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001430 if (fp)
1431 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001432 if (m != NULL && mod != Py_None) {
1433 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1434 Py_DECREF(m);
1435 m = NULL;
1436 }
1437 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001438 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001439
1440 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001441}
1442
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001443
1444/* Re-import a module of any kind and return its module object, WITH
1445 INCREMENTED REFERENCE COUNT */
1446
Guido van Rossum79f25d91997-04-29 20:08:16 +00001447PyObject *
1448PyImport_ReloadModule(m)
1449 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001450{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001451 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001452 PyObject *path = NULL;
1453 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001454 char buf[MAXPATHLEN+1];
1455 struct filedescr *fdp;
1456 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001457
Guido van Rossum79f25d91997-04-29 20:08:16 +00001458 if (m == NULL || !PyModule_Check(m)) {
1459 PyErr_SetString(PyExc_TypeError,
1460 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001461 return NULL;
1462 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001463 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001464 if (name == NULL)
1465 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001466 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001467 PyErr_Format(PyExc_ImportError,
1468 "reload(): module %.200s not in sys.modules",
1469 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001470 return NULL;
1471 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001472 subname = strrchr(name, '.');
1473 if (subname == NULL)
1474 subname = name;
1475 else {
1476 PyObject *parentname, *parent;
1477 parentname = PyString_FromStringAndSize(name, (subname-name));
1478 if (parentname == NULL)
1479 return NULL;
1480 parent = PyDict_GetItem(modules, parentname);
1481 if (parent == NULL) {
1482 PyErr_Format(PyExc_ImportError,
1483 "reload(): parent %.200s not in sys.modules",
1484 name);
1485 return NULL;
1486 }
1487 subname++;
1488 path = PyObject_GetAttrString(parent, "__path__");
1489 if (path == NULL)
1490 PyErr_Clear();
1491 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001492 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001493 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1494 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001495 if (fdp == NULL)
1496 return NULL;
1497 m = load_module(name, fp, buf, fdp->type);
1498 if (fp)
1499 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001500 return m;
1501}
1502
1503
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001504/* Higher-level import emulator which emulates the "import" statement
1505 more accurately -- it invokes the __import__() function from the
1506 builtins of the current globals. This means that the import is
1507 done using whatever import hooks are installed in the current
1508 environment, e.g. by "ni" or "rexec". */
1509
1510PyObject *
1511PyImport_Import(module_name)
1512 PyObject *module_name;
1513{
1514 static PyObject *silly_list = NULL;
1515 static PyObject *builtins_str = NULL;
1516 static PyObject *import_str = NULL;
1517 static PyObject *standard_builtins = NULL;
1518 PyObject *globals = NULL;
1519 PyObject *import = NULL;
1520 PyObject *builtins = NULL;
1521 PyObject *r = NULL;
1522
1523 /* Initialize constant string objects */
1524 if (silly_list == NULL) {
1525 import_str = PyString_InternFromString("__import__");
1526 if (import_str == NULL)
1527 return NULL;
1528 builtins_str = PyString_InternFromString("__builtins__");
1529 if (builtins_str == NULL)
1530 return NULL;
1531 silly_list = Py_BuildValue("[s]", "__doc__");
1532 if (silly_list == NULL)
1533 return NULL;
1534 }
1535
1536 /* Get the builtins from current globals */
1537 globals = PyEval_GetGlobals();
1538 if(globals != NULL) {
1539 builtins = PyObject_GetItem(globals, builtins_str);
1540 if (builtins == NULL)
1541 goto err;
1542 }
1543 else {
1544 /* No globals -- use standard builtins, and fake globals */
1545 PyErr_Clear();
1546
1547 if (standard_builtins == NULL) {
1548 standard_builtins =
1549 PyImport_ImportModule("__builtin__");
1550 if (standard_builtins == NULL)
1551 return NULL;
1552 }
1553
1554 builtins = standard_builtins;
1555 Py_INCREF(builtins);
1556 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1557 if (globals == NULL)
1558 goto err;
1559 }
1560
1561 /* Get the __import__ function from the builtins */
1562 if (PyDict_Check(builtins))
1563 import=PyObject_GetItem(builtins, import_str);
1564 else
1565 import=PyObject_GetAttr(builtins, import_str);
1566 if (import == NULL)
1567 goto err;
1568
1569 /* Call the _import__ function with the proper argument list */
1570 r = PyObject_CallFunction(import, "OOOO",
1571 module_name, globals, globals, silly_list);
1572
1573 err:
1574 Py_XDECREF(globals);
1575 Py_XDECREF(builtins);
1576 Py_XDECREF(import);
1577
1578 return r;
1579}
1580
1581
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001582/* Module 'imp' provides Python access to the primitives used for
1583 importing modules.
1584*/
1585
Guido van Rossum79f25d91997-04-29 20:08:16 +00001586static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001587imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001588 PyObject *self;
1589 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001590{
1591 char buf[4];
1592
Guido van Rossum79f25d91997-04-29 20:08:16 +00001593 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001594 return NULL;
Guido van Rossum6bf62da1997-04-11 20:37:35 +00001595 buf[0] = (char) ((MAGIC >> 0) & 0xff);
1596 buf[1] = (char) ((MAGIC >> 8) & 0xff);
1597 buf[2] = (char) ((MAGIC >> 16) & 0xff);
1598 buf[3] = (char) ((MAGIC >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001599
Guido van Rossum79f25d91997-04-29 20:08:16 +00001600 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001601}
1602
Guido van Rossum79f25d91997-04-29 20:08:16 +00001603static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001604imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001605 PyObject *self;
1606 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001607{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001608 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001609 struct filedescr *fdp;
1610
Guido van Rossum79f25d91997-04-29 20:08:16 +00001611 if (!PyArg_ParseTuple(args, ""))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001612 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001613 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001614 if (list == NULL)
1615 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001616 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1617 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001618 fdp->suffix, fdp->mode, fdp->type);
1619 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001620 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001621 return NULL;
1622 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001623 if (PyList_Append(list, item) < 0) {
1624 Py_DECREF(list);
1625 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001626 return NULL;
1627 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001628 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001629 }
1630 return list;
1631}
1632
Guido van Rossum79f25d91997-04-29 20:08:16 +00001633static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001634call_find_module(name, path)
1635 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001636 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001637{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001638 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00001639 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001640 struct filedescr *fdp;
1641 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001642 FILE *fp = NULL;
1643
1644 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001645 if (path == Py_None)
1646 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001647 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
1648 if (fdp == NULL)
1649 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001650 if (fp != NULL) {
1651 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
1652 if (fob == NULL) {
1653 fclose(fp);
1654 return NULL;
1655 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001656 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001657 else {
1658 fob = Py_None;
1659 Py_INCREF(fob);
1660 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001661 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001662 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001663 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001664 return ret;
1665}
1666
Guido van Rossum79f25d91997-04-29 20:08:16 +00001667static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001668imp_find_module(self, args)
1669 PyObject *self;
1670 PyObject *args;
1671{
1672 char *name;
1673 PyObject *path = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001674 if (!PyArg_ParseTuple(args, "s|O", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001675 return NULL;
1676 return call_find_module(name, path);
1677}
1678
1679static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001680imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001681 PyObject *self;
1682 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001683{
1684 char *name;
1685 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001686 PyObject *m;
1687 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001688 return NULL;
1689 ret = init_builtin(name);
1690 if (ret < 0)
1691 return NULL;
1692 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001693 Py_INCREF(Py_None);
1694 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001695 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001696 m = PyImport_AddModule(name);
1697 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001698 return m;
1699}
1700
Guido van Rossum79f25d91997-04-29 20:08:16 +00001701static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001702imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001703 PyObject *self;
1704 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001705{
1706 char *name;
1707 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001708 PyObject *m;
1709 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001710 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001711 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001712 if (ret < 0)
1713 return NULL;
1714 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001715 Py_INCREF(Py_None);
1716 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001717 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001718 m = PyImport_AddModule(name);
1719 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001720 return m;
1721}
1722
Guido van Rossum79f25d91997-04-29 20:08:16 +00001723static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001724imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001725 PyObject *self;
1726 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001727{
1728 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00001729
Guido van Rossum79f25d91997-04-29 20:08:16 +00001730 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001731 return NULL;
1732 return get_frozen_object(name);
1733}
1734
Guido van Rossum79f25d91997-04-29 20:08:16 +00001735static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001736imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737 PyObject *self;
1738 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001739{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001740 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001741 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001742 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001743 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001744}
1745
Guido van Rossum79f25d91997-04-29 20:08:16 +00001746static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001747imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 PyObject *self;
1749 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001750{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001751 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001752 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753 return NULL;
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001754 return PyInt_FromLong(find_frozen(name) != NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001755}
1756
1757static FILE *
1758get_file(pathname, fob, mode)
1759 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001760 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001761 char *mode;
1762{
1763 FILE *fp;
1764 if (fob == NULL) {
1765 fp = fopen(pathname, mode);
1766 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001767 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001768 }
1769 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001770 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001771 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001772 PyErr_SetString(PyExc_ValueError,
1773 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001774 }
1775 return fp;
1776}
1777
Guido van Rossum79f25d91997-04-29 20:08:16 +00001778static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001779imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001780 PyObject *self;
1781 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001782{
1783 char *name;
1784 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001785 PyObject *fob = NULL;
1786 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001787 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001788 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001789 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001790 return NULL;
1791 fp = get_file(pathname, fob, "rb");
1792 if (fp == NULL)
1793 return NULL;
1794 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001795 if (fob == NULL)
1796 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001797 return m;
1798}
1799
Guido van Rossum79f25d91997-04-29 20:08:16 +00001800static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001801imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001802 PyObject *self;
1803 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001804{
1805 char *name;
1806 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001807 PyObject *fob = NULL;
1808 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00001809 FILE *fp = NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001810 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
1811 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001812 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001813 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00001814 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001815 if (fp == NULL)
1816 return NULL;
1817 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001818 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00001819 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001820}
1821
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001823imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 PyObject *self;
1825 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826{
1827 char *name;
1828 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 PyObject *fob = NULL;
1830 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001831 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001832 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 return NULL;
1835 fp = get_file(pathname, fob, "r");
1836 if (fp == NULL)
1837 return NULL;
1838 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001839 if (fob == NULL)
1840 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001841 return m;
1842}
1843
Jack Jansen9c96a921995-02-15 22:57:06 +00001844#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00001845static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00001846imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 PyObject *self;
1848 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00001849{
1850 char *name;
1851 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001852 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00001853
Guido van Rossum79f25d91997-04-29 20:08:16 +00001854 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00001855 return NULL;
1856 m = PyMac_LoadResourceModule(name, pathname);
1857 return m;
1858}
1859#endif /* macintosh */
1860
Guido van Rossum79f25d91997-04-29 20:08:16 +00001861static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001862imp_load_module(self, args)
1863 PyObject *self;
1864 PyObject *args;
1865{
1866 char *name;
1867 PyObject *fob;
1868 char *pathname;
1869 char *suffix; /* Unused */
1870 char *mode;
1871 int type;
1872 FILE *fp;
1873
1874 if (!PyArg_ParseTuple(args, "sOs(ssi)",
1875 &name, &fob, &pathname,
1876 &suffix, &mode, &type))
1877 return NULL;
1878 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
1879 PyErr_Format(PyExc_ValueError,
1880 "invalid file open mode %.200s", mode);
1881 return NULL;
1882 }
1883 if (fob == Py_None)
1884 fp = NULL;
1885 else {
1886 if (!PyFile_Check(fob)) {
1887 PyErr_SetString(PyExc_ValueError,
1888 "load_module arg#2 should be a file or None");
1889 return NULL;
1890 }
1891 fp = get_file(pathname, fob, mode);
1892 if (fp == NULL)
1893 return NULL;
1894 }
1895 return load_module(name, fp, pathname, type);
1896}
1897
1898static PyObject *
1899imp_load_package(self, args)
1900 PyObject *self;
1901 PyObject *args;
1902{
1903 char *name;
1904 char *pathname;
1905 if (!PyArg_ParseTuple(args, "ss", &name, &pathname))
1906 return NULL;
1907 return load_package(name, pathname);
1908}
1909
1910static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001911imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001912 PyObject *self;
1913 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001914{
1915 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 if (!PyArg_ParseTuple(args, "s", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001917 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001918 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001919}
1920
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001921/* Doc strings */
1922
1923static char doc_imp[] = "\
1924This module provides the components needed to build your own\n\
1925__import__ function. Undocumented functions are obsolete.\n\
1926";
1927
1928static char doc_find_module[] = "\
1929find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
1930Search for a module. If path is omitted or None, search for a\n\
1931built-in, frozen or special module and continue search in sys.path.\n\
1932The module name cannot contain '.'; to search for a submodule of a\n\
1933package, pass the submodule name and the package's __path__.\
1934";
1935
1936static char doc_load_module[] = "\
1937load_module(name, file, filename, (suffix, mode, type)) -> module\n\
1938Load a module, given information returned by find_module().\n\
1939The module name must include the full package name, if any.\
1940";
1941
1942static char doc_get_magic[] = "\
1943get_magic() -> string\n\
1944Return the magic number for .pyc or .pyo files.\
1945";
1946
1947static char doc_get_suffixes[] = "\
1948get_suffixes() -> [(suffix, mode, type), ...]\n\
1949Return a list of (suffix, mode, type) tuples describing the files\n\
1950that find_module() looks for.\
1951";
1952
1953static char doc_new_module[] = "\
1954new_module(name) -> module\n\
1955Create a new module. Do not enter it in sys.modules.\n\
1956The module name must include the full package name, if any.\
1957";
1958
Guido van Rossum79f25d91997-04-29 20:08:16 +00001959static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00001960 {"find_module", imp_find_module, 1, doc_find_module},
1961 {"get_magic", imp_get_magic, 1, doc_get_magic},
1962 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
1963 {"load_module", imp_load_module, 1, doc_load_module},
1964 {"new_module", imp_new_module, 1, doc_new_module},
1965 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001966 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001967 {"init_builtin", imp_init_builtin, 1},
1968 {"init_frozen", imp_init_frozen, 1},
1969 {"is_builtin", imp_is_builtin, 1},
1970 {"is_frozen", imp_is_frozen, 1},
1971 {"load_compiled", imp_load_compiled, 1},
1972 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001973 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00001974#ifdef macintosh
1975 {"load_resource", imp_load_resource, 1},
1976#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001977 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978 {NULL, NULL} /* sentinel */
1979};
1980
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001981int
1982setint(d, name, value)
1983 PyObject *d;
1984 char *name;
1985 int value;
1986{
1987 PyObject *v;
1988 int err;
1989
1990 v = PyInt_FromLong((long)value);
1991 err = PyDict_SetItemString(d, name, v);
1992 Py_XDECREF(v);
1993 return err;
1994}
1995
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001996void
1997initimp()
1998{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001999 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002001 m = Py_InitModule4("imp", imp_methods, doc_imp,
2002 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002003 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002004
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002005 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2006 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2007 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2008 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2009 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2010 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2011 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2012 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002013
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002014 failure:
2015 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002016}