Merge part of the trunk changes into the p3yk branch. This merges from 43030

(branch-creation time) up to 43067. 43068 and 43069 contain a little
swapping action between re.py and sre.py, and this mightily confuses svn
merge, so later changes are going in separately.

This merge should break no additional tests.

The last-merged revision is going in a 'last_merge' property on '.' (the
branch directory.) Arbitrarily chosen, really; if there's a BCP for this, I
couldn't find it, but we can easily change it afterwards ;)
This commit is contained in:
Thomas Wouters 2006-04-21 09:43:23 +00:00
parent d858f70617
commit a977329b6f
116 changed files with 3409 additions and 709 deletions

View file

@ -130,27 +130,42 @@ static void RunStartupFile(PyCompilerFlags *cf)
}
}
/* Get the path to a top-level module */
static struct filedescr * FindModule(const char *module,
FILE **fp, char **filename)
static int RunModule(char *module)
{
struct filedescr *fdescr = NULL;
*fp = NULL;
*filename = malloc(MAXPATHLEN);
if (*filename == NULL)
return NULL;
/* Find the actual module source code */
fdescr = _PyImport_FindModule(module, NULL,
*filename, MAXPATHLEN, fp, NULL);
if (fdescr == NULL) {
free(*filename);
*filename = NULL;
PyObject *runpy, *runmodule, *runargs, *result;
runpy = PyImport_ImportModule("runpy");
if (runpy == NULL) {
fprintf(stderr, "Could not import runpy module\n");
return -1;
}
return fdescr;
runmodule = PyObject_GetAttrString(runpy, "run_module");
if (runmodule == NULL) {
fprintf(stderr, "Could not access runpy.run_module\n");
Py_DECREF(runpy);
return -1;
}
runargs = Py_BuildValue("sOsO", module,
Py_None, "__main__", Py_True);
if (runargs == NULL) {
fprintf(stderr,
"Could not create arguments for runpy.run_module\n");
Py_DECREF(runpy);
Py_DECREF(runmodule);
return -1;
}
result = PyObject_Call(runmodule, runargs, NULL);
if (result == NULL) {
PyErr_Print();
}
Py_DECREF(runpy);
Py_DECREF(runmodule);
Py_DECREF(runargs);
if (result == NULL) {
return -1;
}
Py_DECREF(result);
return 0;
}
/* Main program */
@ -410,28 +425,9 @@ Py_Main(int argc, char **argv)
}
if (module != NULL) {
/* Backup _PyOS_optind and find the real file */
struct filedescr *fdescr = NULL;
/* Backup _PyOS_optind and force sys.arv[0] = module */
_PyOS_optind--;
if ((fdescr = FindModule(module, &fp, &filename))) {
argv[_PyOS_optind] = filename;
} else {
fprintf(stderr, "%s: module %s not found\n",
argv[0], module);
return 2;
}
if (!fp) {
fprintf(stderr,
"%s: module %s has no associated file\n",
argv[0], module);
return 2;
}
if (!_PyImport_IsScript(fdescr)) {
fprintf(stderr,
"%s: module %s not usable as script\n (%s)\n",
argv[0], module, filename);
return 2;
}
argv[_PyOS_optind] = module;
}
PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind);
@ -450,9 +446,8 @@ Py_Main(int argc, char **argv)
sts = PyRun_SimpleStringFlags(command, &cf) != 0;
free(command);
} else if (module) {
sts = PyRun_AnyFileExFlags(fp, filename, 1, &cf) != 0;
sts = RunModule(module);
free(module);
free(filename);
}
else {
if (filename == NULL && stdin_is_interactive) {