Added execfile().
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index c2a7cb2..bf4d3fd 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -187,6 +187,42 @@
 }
 
 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;
 	object *v;
@@ -603,6 +639,7 @@
 	{"divmod",	builtin_divmod},
 	{"eval",	builtin_eval},
 	{"exec",	builtin_exec},
+	{"execfile",	builtin_execfile},
 	{"float",	builtin_float},
 	{"getattr",	builtin_getattr},
 	{"hex",		builtin_hex},