Mercurial > cpython-lru_cache-weakref
diff Python/import.c @ 2349:d65c485e0ad8 legacy-trunk
Added hooks to support importing pyc code from a resource on the mac.
| author | Jack Jansen <jack.jansen@cwi.nl> |
|---|---|
| date | Wed, 15 Feb 1995 22:57:06 +0000 |
| parents | 6263e2fd9398 |
| children | 42b5689a7409 |
line wrap: on
line diff
--- a/Python/import.c Wed Feb 15 22:55:45 1995 +0000 +++ b/Python/import.c Wed Feb 15 22:57:06 1995 +0000 @@ -39,6 +39,9 @@ #include "eval.h" #include "osdefs.h" #include "importdl.h" +#ifdef macintosh +#include "macglue.h" +#endif extern int verbose; /* Defined in pythonrun.c */ @@ -135,10 +138,10 @@ /* Execute a code object in a module and return the module object WITH INCREMENTED REFERENCE COUNT */ -static object * +object * exec_code_module(name, co) char *name; - codeobject *co; + object *co; { object *m, *d, *v; @@ -269,13 +272,12 @@ if (verbose) fprintf(stderr, "import %s # precompiled from %s\n", name, cpathname); - m = exec_code_module(name, co); + m = exec_code_module(name, (object *)co); DECREF(co); return m; } - /* Parse a source file and return the corresponding code object */ static codeobject * @@ -379,7 +381,7 @@ name, pathname); write_compiled_module(co, cpathname, mtime); } - m = exec_code_module(name, co); + m = exec_code_module(name, (object *)co); DECREF(co); return m; @@ -422,6 +424,13 @@ strcpy(buf, getstringvalue(v)); if (strlen(buf) != len) continue; /* v contains '\0' */ +#ifdef macintosh + if ( PyMac_FindResourceModule(name, buf) ) { + static struct filedescr resfiledescr = { "", "", PY_RESOURCE}; + + return &resfiledescr; + } +#endif if (len > 0 && buf[len-1] != SEP) buf[len++] = SEP; strcpy(buf+len, name); @@ -479,13 +488,20 @@ m = load_dynamic_module(name, buf); break; +#ifdef macintosh + case PY_RESOURCE: + m = PyMac_LoadResourceModule(name, buf); + break; +#endif + default: err_setstr(SystemError, "find_module returned unexpected result"); m = NULL; } - fclose(fp); + if ( fp ) + fclose(fp); return m; } @@ -555,7 +571,7 @@ err_setstr(SystemError, "frozen object is not a code object"); return -1; } - m = exec_code_module(name, (codeobject *)co); + m = exec_code_module(name, co); DECREF(co); if (m == NULL) return -1; @@ -874,6 +890,23 @@ return m; } +#ifdef macintosh +static object * +imp_load_resource(self, args) + object *self; + object *args; +{ + char *name; + char *pathname; + object *m; + + if (!newgetargs(args, "ss", &name, &pathname)) + return NULL; + m = PyMac_LoadResourceModule(name, pathname); + return m; +} +#endif /* macintosh */ + static object * imp_new_module(self, args) object *self; @@ -897,6 +930,9 @@ {"load_dynamic", imp_load_dynamic, 1}, {"load_source", imp_load_source, 1}, {"new_module", imp_new_module, 1}, +#ifdef macintosh + {"load_resource", imp_load_resource, 1}, +#endif {NULL, NULL} /* sentinel */ };
