diff options
Diffstat (limited to 'Python/import.c')
-rw-r--r-- | Python/import.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/Python/import.c b/Python/import.c index f4b4ca9..93952a5 100644 --- a/Python/import.c +++ b/Python/import.c @@ -148,8 +148,15 @@ import_module(name) char *name; { object *m; - if ((m = dictlookup(modules, name)) == NULL) - m = load_module(name); + if ((m = dictlookup(modules, name)) == NULL) { + if (init_builtin(name)) { + if ((m = dictlookup(modules, name)) == NULL) + err_setstr(SystemError, "builtin module missing"); + } + else { + m = load_module(name); + } + } return m; } @@ -204,3 +211,25 @@ doneimport() } DECREF(modules); } + + +/* Initialize built-in modules when first imported */ + +extern struct { + char *name; + void (*initfunc)(); +} inittab[]; + +static int +init_builtin(name) + char *name; +{ + int i; + for (i = 0; inittab[i].name != NULL; i++) { + if (strcmp(name, inittab[i].name) == 0) { + (*inittab[i].initfunc)(); + return 1; + } + } + return 0; +} |