diff Python/bltinmodule.c @ 1073:2c0432fcc270 legacy-trunk

Modified most (but not yet all) I/O to always go through sys.stdout or sys.stderr or sys.stdin, and to work with any object as long as it has a write() (respectively readline()) methods. Some functions that took a FILE* argument now take an object* argument.
author Guido van Rossum <guido@python.org>
date Fri, 25 Sep 1992 21:59:05 +0000
parents 2ed511171809
children e4c6a0dd5c2b
line wrap: on
line diff
--- a/Python/bltinmodule.c	Fri Sep 25 21:54:05 1992 +0000
+++ b/Python/bltinmodule.c	Fri Sep 25 21:59:05 1992 +0000
@@ -308,28 +308,19 @@
 	return (*nb->nb_hex)(v);
 }
 
+static object *builtin_raw_input PROTO((object *, object *));
+
 static object *
 builtin_input(self, v)
 	object *self;
 	object *v;
 {
-	FILE *in = sysgetfile("stdin", stdin);
-	FILE *out = sysgetfile("stdout", stdout);
-	int c;
-	object *m, *d;
-	flushline();
-	if (v != NULL) {
-		if (printobject(v, out, PRINT_RAW) != 0)
-			return NULL;
-	}
-	m = add_module("__main__");
-	d = getmoduledict(m);
-	BGN_SAVE
-	while ((c = getc(in)) != EOF && (c == ' ' || c == '\t'))
-		;
-	ungetc(c, in);
-	END_SAVE
-	return run_file(in, "<stdin>", expr_input, d, d);
+	object *line = builtin_raw_input(self, v);
+	if (line == NULL)
+		return line;
+	v = exec_eval(line, eval_input);
+	DECREF(line);
+	return v;
 }
 
 static object *
@@ -578,10 +569,14 @@
 	object *self;
 	object *v;
 {
-	FILE *out = sysgetfile("stdout", stdout);
+	object *f = sysget("stdout");
+	if (f == NULL) {
+		err_setstr(RuntimeError, "lost sys.stdout");
+		return NULL;
+	}
 	flushline();
 	if (v != NULL) {
-		if (printobject(v, out, PRINT_RAW) != 0)
+		if (writeobject(v, f, PRINT_RAW) != 0)
 			return NULL;
 	}
 	return filegetline(sysget("stdin"), -1);