Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 1270:14369a5e6167 legacy-trunk
Support for frozen scripts; added -i option.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 01 Apr 1993 20:59:32 +0000 |
| parents | f820e6917f07 |
| children | 9fed5726a36d |
line wrap: on
line diff
--- a/Python/import.c Thu Apr 01 20:50:35 1993 +0000 +++ b/Python/import.c Thu Apr 01 20:59:32 1993 +0000 @@ -52,7 +52,7 @@ extern char *argv0; #endif -/* Magic word to reject pre-0.9.9 .pyc files */ +/* Magic word to reject .pyc files generated by other Python versions */ #define MAGIC 0x99BE3AL @@ -325,8 +325,11 @@ char *name; { object *m; + int n; if ((m = dictlookup(modules, name)) == NULL) { - if (init_builtin(name)) { + if ((n = init_builtin(name)) || (n = init_frozen(name))) { + if (n < 0) + return NULL; if ((m = dictlookup(modules, name)) == NULL) err_setstr(SystemError, "builtin module missing"); @@ -411,3 +414,38 @@ } return 0; } + +extern struct frozen { + char *name; + char *code; + int size; +} frozen_modules[]; + +int +init_frozen(name) + char *name; +{ + struct frozen *p; + codeobject *co; + object *m, *d, *v; + for (p = frozen_modules; ; p++) { + if (p->name == NULL) + return 0; + if (strcmp(p->name, name) == 0) + break; + } + if (verbose) + fprintf(stderr, "import %s # frozen\n", name); + co = (codeobject *) rds_object(p->code, p->size); + if (co == NULL) + return -1; + if ((m = add_module(name)) == NULL || + (d = getmoduledict(m)) == NULL || + (v = eval_code(co, d, d, (object *)NULL)) == NULL) { + DECREF(co); + return -1; + } + DECREF(co); + DECREF(v); + return 1; +}
