diff options
| author | Guido van Rossum <guido@python.org> | 1991-06-07 16:10:43 +0000 | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1991-06-07 16:10:43 +0000 | 
| commit | 909336104b70cae29c0c4fde4477d508e1d709ac (patch) | |
| tree | 565a1a5a3aea78eeca3216ab2d95bc74b73286a1 | |
| parent | dd0108081b1a4b44d712477308b9764139ebc6a2 (diff) | |
| download | cpython-git-909336104b70cae29c0c4fde4477d508e1d709ac.tar.gz | |
printobject now returns an error code
| -rw-r--r-- | Objects/fileobject.c | 9 | ||||
| -rw-r--r-- | Objects/floatobject.c | 3 | ||||
| -rw-r--r-- | Objects/intobject.c | 3 | ||||
| -rw-r--r-- | Objects/listobject.c | 13 | ||||
| -rw-r--r-- | Objects/longobject.c | 15 | ||||
| -rw-r--r-- | Objects/methodobject.c | 3 | ||||
| -rw-r--r-- | Objects/moduleobject.c | 3 | ||||
| -rw-r--r-- | Objects/object.c | 88 | ||||
| -rw-r--r-- | Python/bltinmodule.c | 12 | ||||
| -rw-r--r-- | Python/ceval.c | 7 | 
10 files changed, 70 insertions, 86 deletions
diff --git a/Objects/fileobject.c b/Objects/fileobject.c index b168ccfabb..143f6971d7 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -117,17 +117,20 @@ file_dealloc(f)  	free((char *)f);  } -static void +static int  file_print(f, fp, flags)  	fileobject *f;  	FILE *fp;  	int flags;  {  	fprintf(fp, "<%s file ", f->f_fp == NULL ? "closed" : "open"); -	printobject(f->f_name, fp, flags); +	if (printobject(f->f_name, fp, flags) != 0) +		return -1;  	fprintf(fp, ", mode "); -	printobject(f->f_mode, fp, flags); +	if (printobject(f->f_mode, fp, flags) != 0) +		return -1;  	fprintf(fp, ">"); +	return 0;  }  static object * diff --git a/Objects/floatobject.c b/Objects/floatobject.c index cd7d084c75..a386e0c2f1 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -98,7 +98,7 @@ float_buf_repr(buf, v)  	}  } -static void +static int  float_print(v, fp, flags)  	floatobject *v;  	FILE *fp; @@ -107,6 +107,7 @@ float_print(v, fp, flags)  	char buf[100];  	float_buf_repr(buf, v);  	fputs(buf, fp); +	return 0;  }  static object * diff --git a/Objects/intobject.c b/Objects/intobject.c index 6e48a27cd3..91c43b97b8 100644 --- a/Objects/intobject.c +++ b/Objects/intobject.c @@ -120,13 +120,14 @@ getintvalue(op)  /* Methods */ -static void +static int  int_print(v, fp, flags)  	intobject *v;  	FILE *fp;  	int flags;  {  	fprintf(fp, "%ld", v->ob_ival); +	return 0;  }  static object * diff --git a/Objects/listobject.c b/Objects/listobject.c index ce27834d96..4026622673 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -185,7 +185,7 @@ list_dealloc(op)  	free((ANY *)op);  } -static void +static int  list_print(op, fp, flags)  	listobject *op;  	FILE *fp; @@ -193,13 +193,14 @@ list_print(op, fp, flags)  {  	int i;  	fprintf(fp, "["); -	for (i = 0; i < op->ob_size && !StopPrint; i++) { -		if (i > 0) { +	for (i = 0; i < op->ob_size; i++) { +		if (i > 0)  			fprintf(fp, ", "); -		} -		printobject(op->ob_item[i], fp, flags); +		if (printobject(op->ob_item[i], fp, flags) != 0) +			return -1;  	}  	fprintf(fp, "]"); +	return 0;  }  object * @@ -302,7 +303,7 @@ list_concat(a, bb)  	size = a->ob_size + b->ob_size;  	np = (listobject *) newlistobject(size);  	if (np == NULL) { -		return err_nomem(); +		return NULL;  	}  	for (i = 0; i < a->ob_size; i++) {  		object *v = a->ob_item[i]; diff --git a/Objects/longobject.c b/Objects/longobject.c index de7ff3985e..ca4088c93d 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -533,21 +533,18 @@ long_dealloc(v)  	DEL(v);  } -static void +static int  long_print(v, fp, flags)  	longobject *v;  	FILE *fp;  	int flags;  {  	stringobject *str = long_format(v, 10); -	if (str == NULL) { -		err_clear(); -		fprintf(fp, "[err]"); -	} -	else { -		fprintf(fp, "%sL", GETSTRINGVALUE(str)); -		DECREF(str); -	} +	if (str == NULL) +		return -1; +	fprintf(fp, "%sL", GETSTRINGVALUE(str)); +	DECREF(str); +	return 0;  }  static object * diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 62649f191c..46a2f86bee 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -85,7 +85,7 @@ meth_dealloc(m)  	free((char *)m);  } -static void +static int  meth_print(m, fp, flags)  	methodobject *m;  	FILE *fp; @@ -96,6 +96,7 @@ meth_print(m, fp, flags)  	else  		fprintf(fp, "<built-in method '%s' of some %s object>",  			m->m_name, m->m_self->ob_type->tp_name); +	return 0;  }  static object * diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index d30d4659d7..ffc8e742da 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -83,13 +83,14 @@ module_dealloc(m)  	free((char *)m);  } -static void +static int  module_print(m, fp, flags)  	moduleobject *m;  	FILE *fp;  	int flags;  {  	fprintf(fp, "<module '%s'>", getstringvalue(m->md_name)); +	return 0;  }  static object * diff --git a/Objects/object.c b/Objects/object.c index 2b5b891849..b63f0679db 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -61,77 +61,49 @@ newvarobject(tp, size)  	return op;  } -int StopPrint; /* Flag to indicate printing must be stopped */ - -static int prlevel; - -void +int  printobject(op, fp, flags)  	object *op;  	FILE *fp;  	int flags;  { -	/* Hacks to make printing a long or recursive object interruptible */ -	/* XXX Interrupts should leave a more permanent error */ -	prlevel++; -	if (!StopPrint && intrcheck()) { -		fprintf(fp, "\n[print interrupted]\n"); -		StopPrint = 1; +	if (intrcheck()) { +		err_set(KeyboardInterrupt); +		return -1;  	} -	if (!StopPrint) { -		if (op == NULL) { -			fprintf(fp, "<nil>"); -		} -		else { -			if (op->ob_refcnt <= 0) -				fprintf(fp, "(refcnt %d):", op->ob_refcnt); -			if (op->ob_type->tp_print == NULL) { -				fprintf(fp, "<%s object at %lx>", -					op->ob_type->tp_name, (long)op); -			} -			else { -				(*op->ob_type->tp_print)(op, fp, flags); -			} -		} +	if (op == NULL) { +		fprintf(fp, "<nil>");  	} -	prlevel--; -	if (prlevel == 0) -		StopPrint = 0; +	else { +		if (op->ob_refcnt <= 0) +			fprintf(fp, "(refcnt %d):", op->ob_refcnt); +		if (op->ob_type->tp_print == NULL) +			fprintf(fp, "<%s object at %lx>", +				op->ob_type->tp_name, (long)op); +		else +			return (*op->ob_type->tp_print)(op, fp, flags); +	} +	return 0;  }  object *  reprobject(v)  	object *v;  { -	object *w = NULL; -	/* Hacks to make converting a long or recursive object interruptible */ -	prlevel++; -	if (!StopPrint && intrcheck()) { -		StopPrint = 1; +	if (intrcheck()) {  		err_set(KeyboardInterrupt); +		return NULL;  	} -	if (!StopPrint) { -		if (v == NULL) { -			w = newstringobject("<NULL>"); -		} -		else if (v->ob_type->tp_repr == NULL) { -			char buf[100]; -			sprintf(buf, "<%.80s object at %lx>", -				v->ob_type->tp_name, (long)v); -			w = newstringobject(buf); -		} -		else { -			w = (*v->ob_type->tp_repr)(v); -		} -		if (StopPrint) { -			XDECREF(w); -			w = NULL; -		} +	if (v == NULL) +		return newstringobject("<NULL>"); +	else if (v->ob_type->tp_repr == NULL) { +		char buf[120]; +		sprintf(buf, "<%.80s object at %lx>", +			v->ob_type->tp_name, (long)v); +		return newstringobject(buf);  	} -	prlevel--; -	if (prlevel == 0) -		StopPrint = 0; -	return w; +	else +		return (*v->ob_type->tp_repr)(v);  }  int @@ -191,13 +163,14 @@ There is (and should be!) no way to create other objects of this type,  so there is exactly one (which is indestructible, by the way).  */ -static void +static int  none_print(op, fp, flags)  	object *op;  	FILE *fp;  	int flags;  {  	fprintf(fp, "None"); +	return 0;  }  static object * @@ -278,7 +251,8 @@ printrefs(fp)  	fprintf(fp, "Remaining objects:\n");  	for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {  		fprintf(fp, "[%d] ", op->ob_refcnt); -		printobject(op, fp, 0); +		if (printobject(op, fp, 0) != 0) +			err_clear();  		putc('\n', fp);  	}  } diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 47dc9207b5..98eb231bfa 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -192,8 +192,10 @@ builtin_input(self, v)  	int err;  	object *m, *d;  	flushline(); -	if (v != NULL) -		printobject(v, out, PRINT_RAW); +	if (v != NULL) { +		if (printobject(v, out, PRINT_RAW) != 0) +			return NULL; +	}  	m = add_module("__main__");  	d = getmoduledict(m);  	return run_file(in, "<stdin>", expr_input, d, d); @@ -450,8 +452,10 @@ builtin_raw_input(self, v)  {  	FILE *out = sysgetfile("stdout", stdout);  	flushline(); -	if (v != NULL) -		printobject(v, out, PRINT_RAW); +	if (v != NULL) { +		if (printobject(v, out, PRINT_RAW) != 0) +			return NULL; +	}  	return filegetline(sysget("stdin"), -1);  } diff --git a/Python/ceval.c b/Python/ceval.c index e24866c9fa..975b78881b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -428,7 +428,7 @@ eval_code(co, globals, locals, arg)  			if (v != None) {  				flushline();  				softspace(sysget("stdout"), 1); -				printobject(v, fp, 0); +				err = printobject(v, fp, 0);  				flushline();  			}  			DECREF(v); @@ -447,7 +447,7 @@ eval_code(co, globals, locals, arg)  					softspace(sysget("stdout"), 0);  			}  			else { -				printobject(v, fp, 0); +				err = printobject(v, fp, 0);  			}  			DECREF(v);  			break; @@ -933,7 +933,8 @@ prtrace(v, str)  	char *str;  {  	printf("%s ", str); -	printobject(v, stdout, 0); +	if (printobject(v, stdout, 0) != 0) +		err_clear(); /* Don't know what else to do */  	printf("\n");  }  #endif  | 
