Added hooks to support importing pyc code from a resource on the mac.
This commit is contained in:
parent
3cfc8bd841
commit
9c96a923fb
|
@ -39,6 +39,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "eval.h"
|
#include "eval.h"
|
||||||
#include "osdefs.h"
|
#include "osdefs.h"
|
||||||
#include "importdl.h"
|
#include "importdl.h"
|
||||||
|
#ifdef macintosh
|
||||||
|
#include "macglue.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int verbose; /* Defined in pythonrun.c */
|
extern int verbose; /* Defined in pythonrun.c */
|
||||||
|
|
||||||
|
@ -135,10 +138,10 @@ add_module(name)
|
||||||
/* Execute a code object in a module and return the module object
|
/* Execute a code object in a module and return the module object
|
||||||
WITH INCREMENTED REFERENCE COUNT */
|
WITH INCREMENTED REFERENCE COUNT */
|
||||||
|
|
||||||
static object *
|
object *
|
||||||
exec_code_module(name, co)
|
exec_code_module(name, co)
|
||||||
char *name;
|
char *name;
|
||||||
codeobject *co;
|
object *co;
|
||||||
{
|
{
|
||||||
object *m, *d, *v;
|
object *m, *d, *v;
|
||||||
|
|
||||||
|
@ -269,13 +272,12 @@ load_compiled_module(name, cpathname, fp)
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stderr, "import %s # precompiled from %s\n",
|
fprintf(stderr, "import %s # precompiled from %s\n",
|
||||||
name, cpathname);
|
name, cpathname);
|
||||||
m = exec_code_module(name, co);
|
m = exec_code_module(name, (object *)co);
|
||||||
DECREF(co);
|
DECREF(co);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Parse a source file and return the corresponding code object */
|
/* Parse a source file and return the corresponding code object */
|
||||||
|
|
||||||
static codeobject *
|
static codeobject *
|
||||||
|
@ -379,7 +381,7 @@ load_source_module(name, pathname, fp)
|
||||||
name, pathname);
|
name, pathname);
|
||||||
write_compiled_module(co, cpathname, mtime);
|
write_compiled_module(co, cpathname, mtime);
|
||||||
}
|
}
|
||||||
m = exec_code_module(name, co);
|
m = exec_code_module(name, (object *)co);
|
||||||
DECREF(co);
|
DECREF(co);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
@ -422,6 +424,13 @@ find_module(name, path, buf, buflen, p_fp)
|
||||||
strcpy(buf, getstringvalue(v));
|
strcpy(buf, getstringvalue(v));
|
||||||
if (strlen(buf) != len)
|
if (strlen(buf) != len)
|
||||||
continue; /* v contains '\0' */
|
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)
|
if (len > 0 && buf[len-1] != SEP)
|
||||||
buf[len++] = SEP;
|
buf[len++] = SEP;
|
||||||
strcpy(buf+len, name);
|
strcpy(buf+len, name);
|
||||||
|
@ -479,13 +488,20 @@ load_module(name)
|
||||||
m = load_dynamic_module(name, buf);
|
m = load_dynamic_module(name, buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef macintosh
|
||||||
|
case PY_RESOURCE:
|
||||||
|
m = PyMac_LoadResourceModule(name, buf);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
err_setstr(SystemError,
|
err_setstr(SystemError,
|
||||||
"find_module returned unexpected result");
|
"find_module returned unexpected result");
|
||||||
m = NULL;
|
m = NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
fclose(fp);
|
if ( fp )
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
@ -555,7 +571,7 @@ init_frozen(name)
|
||||||
err_setstr(SystemError, "frozen object is not a code object");
|
err_setstr(SystemError, "frozen object is not a code object");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
m = exec_code_module(name, (codeobject *)co);
|
m = exec_code_module(name, co);
|
||||||
DECREF(co);
|
DECREF(co);
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -874,6 +890,23 @@ imp_load_source(self, args)
|
||||||
return m;
|
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 *
|
static object *
|
||||||
imp_new_module(self, args)
|
imp_new_module(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
|
@ -897,6 +930,9 @@ static struct methodlist imp_methods[] = {
|
||||||
{"load_dynamic", imp_load_dynamic, 1},
|
{"load_dynamic", imp_load_dynamic, 1},
|
||||||
{"load_source", imp_load_source, 1},
|
{"load_source", imp_load_source, 1},
|
||||||
{"new_module", imp_new_module, 1},
|
{"new_module", imp_new_module, 1},
|
||||||
|
#ifdef macintosh
|
||||||
|
{"load_resource", imp_load_resource, 1},
|
||||||
|
#endif
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
/* Definitions for dynamic loading of extension modules */
|
/* Definitions for dynamic loading of extension modules */
|
||||||
|
#ifdef macintosh
|
||||||
|
enum filetype {SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION, PY_RESOURCE};
|
||||||
|
#else
|
||||||
enum filetype {SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION};
|
enum filetype {SEARCH_ERROR, PY_SOURCE, PY_COMPILED, C_EXTENSION};
|
||||||
|
#endif
|
||||||
|
|
||||||
extern struct filedescr {
|
extern struct filedescr {
|
||||||
char *suffix;
|
char *suffix;
|
||||||
|
|
Loading…
Reference in New Issue