summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-06-07 16:10:43 (GMT)
committerGuido van Rossum <guido@python.org>1991-06-07 16:10:43 (GMT)
commit909336104b70cae29c0c4fde4477d508e1d709ac (patch)
tree565a1a5a3aea78eeca3216ab2d95bc74b73286a1
parentdd0108081b1a4b44d712477308b9764139ebc6a2 (diff)
downloadcpython-909336104b70cae29c0c4fde4477d508e1d709ac.zip
cpython-909336104b70cae29c0c4fde4477d508e1d709ac.tar.gz
cpython-909336104b70cae29c0c4fde4477d508e1d709ac.tar.bz2
printobject now returns an error code
-rw-r--r--Objects/fileobject.c9
-rw-r--r--Objects/floatobject.c3
-rw-r--r--Objects/intobject.c3
-rw-r--r--Objects/listobject.c13
-rw-r--r--Objects/longobject.c15
-rw-r--r--Objects/methodobject.c3
-rw-r--r--Objects/moduleobject.c3
-rw-r--r--Objects/object.c88
-rw-r--r--Python/bltinmodule.c12
-rw-r--r--Python/ceval.c7
10 files changed, 70 insertions, 86 deletions
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index b168ccf..143f697 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 cd7d084..a386e0c 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 6e48a27..91c43b9 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 ce27834..4026622 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 de7ff39..ca4088c 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 62649f1..46a2f86 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 d30d465..ffc8e74 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 2b5b891..b63f067 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 47dc920..98eb231 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 e24866c..975b788 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