From 0f61f8a4bdd0a0871ada8e4e909e165f0e44eb6e Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 25 Feb 1992 18:55:05 +0000 Subject: [PATCH] Added execfile(). --- Python/bltinmodule.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index c2a7cb21dab..bf4d3fd9ed6 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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},