]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added execfile().
authorGuido van Rossum <guido@python.org>
Tue, 25 Feb 1992 18:55:05 +0000 (18:55 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 25 Feb 1992 18:55:05 +0000 (18:55 +0000)
Python/bltinmodule.c

index c2a7cb21daba823af9821ebd12dd0ea5170bf1dd..bf4d3fd9ed6c549d0ba0843498561755c0b8e3e4 100644 (file)
@@ -186,6 +186,42 @@ builtin_exec(self, v)
        return exec_eval(v, file_input);
 }
 
+static object *
+builtin_execfile(self, v)
+       object *self;
+       object *v;
+{
+       object *str = NULL, *globals = NULL, *locals = NULL, *w;
+       FILE* fp;
+       int n;
+       if (v != NULL) {
+               if (is_stringobject(v))
+                       str = v;
+               else if (is_tupleobject(v) &&
+                               ((n = gettuplesize(v)) == 2 || n == 3)) {
+                       str = gettupleitem(v, 0);
+                       globals = gettupleitem(v, 1);
+                       if (n == 3)
+                               locals = gettupleitem(v, 2);
+               }
+       }
+       if (str == NULL || !is_stringobject(str) ||
+                       globals != NULL && !is_dictobject(globals) ||
+                       locals != NULL && !is_dictobject(locals)) {
+               err_setstr(TypeError,
+                   "execfile arguments must be filename[,dict[,dict]]");
+               return NULL;
+       }
+       fp = fopen(getstringvalue(str), "r");
+       if (fp == NULL) {
+               err_setstr(IOError, "execfile cannot open the file argument");
+               return NULL;
+       }
+       w = run_file(fp, getstringvalue(str), file_input, globals, locals);
+       fclose(fp);
+       return w;
+}
+
 static object *
 builtin_float(self, v)
        object *self;
@@ -603,6 +639,7 @@ static struct methodlist builtin_methods[] = {
        {"divmod",      builtin_divmod},
        {"eval",        builtin_eval},
        {"exec",        builtin_exec},
+       {"execfile",    builtin_execfile},
        {"float",       builtin_float},
        {"getattr",     builtin_getattr},
        {"hex",         builtin_hex},