printobject now returns an error code

This commit is contained in:
Guido van Rossum 1991-06-07 16:10:43 +00:00
parent dd0108081b
commit 909336104b
10 changed files with 70 additions and 86 deletions

View file

@ -117,17 +117,20 @@ file_dealloc(f)
free((char *)f); free((char *)f);
} }
static void static int
file_print(f, fp, flags) file_print(f, fp, flags)
fileobject *f; fileobject *f;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
fprintf(fp, "<%s file ", f->f_fp == NULL ? "closed" : "open"); 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 "); fprintf(fp, ", mode ");
printobject(f->f_mode, fp, flags); if (printobject(f->f_mode, fp, flags) != 0)
return -1;
fprintf(fp, ">"); fprintf(fp, ">");
return 0;
} }
static object * static object *

View file

@ -98,7 +98,7 @@ float_buf_repr(buf, v)
} }
} }
static void static int
float_print(v, fp, flags) float_print(v, fp, flags)
floatobject *v; floatobject *v;
FILE *fp; FILE *fp;
@ -107,6 +107,7 @@ float_print(v, fp, flags)
char buf[100]; char buf[100];
float_buf_repr(buf, v); float_buf_repr(buf, v);
fputs(buf, fp); fputs(buf, fp);
return 0;
} }
static object * static object *

View file

@ -120,13 +120,14 @@ getintvalue(op)
/* Methods */ /* Methods */
static void static int
int_print(v, fp, flags) int_print(v, fp, flags)
intobject *v; intobject *v;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
fprintf(fp, "%ld", v->ob_ival); fprintf(fp, "%ld", v->ob_ival);
return 0;
} }
static object * static object *

View file

@ -185,7 +185,7 @@ list_dealloc(op)
free((ANY *)op); free((ANY *)op);
} }
static void static int
list_print(op, fp, flags) list_print(op, fp, flags)
listobject *op; listobject *op;
FILE *fp; FILE *fp;
@ -193,13 +193,14 @@ list_print(op, fp, flags)
{ {
int i; int i;
fprintf(fp, "["); fprintf(fp, "[");
for (i = 0; i < op->ob_size && !StopPrint; i++) { for (i = 0; i < op->ob_size; i++) {
if (i > 0) { if (i > 0)
fprintf(fp, ", "); fprintf(fp, ", ");
} if (printobject(op->ob_item[i], fp, flags) != 0)
printobject(op->ob_item[i], fp, flags); return -1;
} }
fprintf(fp, "]"); fprintf(fp, "]");
return 0;
} }
object * object *
@ -302,7 +303,7 @@ list_concat(a, bb)
size = a->ob_size + b->ob_size; size = a->ob_size + b->ob_size;
np = (listobject *) newlistobject(size); np = (listobject *) newlistobject(size);
if (np == NULL) { if (np == NULL) {
return err_nomem(); return NULL;
} }
for (i = 0; i < a->ob_size; i++) { for (i = 0; i < a->ob_size; i++) {
object *v = a->ob_item[i]; object *v = a->ob_item[i];

View file

@ -533,21 +533,18 @@ long_dealloc(v)
DEL(v); DEL(v);
} }
static void static int
long_print(v, fp, flags) long_print(v, fp, flags)
longobject *v; longobject *v;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
stringobject *str = long_format(v, 10); stringobject *str = long_format(v, 10);
if (str == NULL) { if (str == NULL)
err_clear(); return -1;
fprintf(fp, "[err]");
}
else {
fprintf(fp, "%sL", GETSTRINGVALUE(str)); fprintf(fp, "%sL", GETSTRINGVALUE(str));
DECREF(str); DECREF(str);
} return 0;
} }
static object * static object *

View file

@ -85,7 +85,7 @@ meth_dealloc(m)
free((char *)m); free((char *)m);
} }
static void static int
meth_print(m, fp, flags) meth_print(m, fp, flags)
methodobject *m; methodobject *m;
FILE *fp; FILE *fp;
@ -96,6 +96,7 @@ meth_print(m, fp, flags)
else else
fprintf(fp, "<built-in method '%s' of some %s object>", fprintf(fp, "<built-in method '%s' of some %s object>",
m->m_name, m->m_self->ob_type->tp_name); m->m_name, m->m_self->ob_type->tp_name);
return 0;
} }
static object * static object *

View file

@ -83,13 +83,14 @@ module_dealloc(m)
free((char *)m); free((char *)m);
} }
static void static int
module_print(m, fp, flags) module_print(m, fp, flags)
moduleobject *m; moduleobject *m;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
fprintf(fp, "<module '%s'>", getstringvalue(m->md_name)); fprintf(fp, "<module '%s'>", getstringvalue(m->md_name));
return 0;
} }
static object * static object *

View file

@ -61,77 +61,49 @@ newvarobject(tp, size)
return op; return op;
} }
int StopPrint; /* Flag to indicate printing must be stopped */ int
static int prlevel;
void
printobject(op, fp, flags) printobject(op, fp, flags)
object *op; object *op;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
/* Hacks to make printing a long or recursive object interruptible */ if (intrcheck()) {
/* XXX Interrupts should leave a more permanent error */ err_set(KeyboardInterrupt);
prlevel++; return -1;
if (!StopPrint && intrcheck()) {
fprintf(fp, "\n[print interrupted]\n");
StopPrint = 1;
} }
if (!StopPrint) {
if (op == NULL) { if (op == NULL) {
fprintf(fp, "<nil>"); fprintf(fp, "<nil>");
} }
else { else {
if (op->ob_refcnt <= 0) if (op->ob_refcnt <= 0)
fprintf(fp, "(refcnt %d):", op->ob_refcnt); fprintf(fp, "(refcnt %d):", op->ob_refcnt);
if (op->ob_type->tp_print == NULL) { if (op->ob_type->tp_print == NULL)
fprintf(fp, "<%s object at %lx>", fprintf(fp, "<%s object at %lx>",
op->ob_type->tp_name, (long)op); op->ob_type->tp_name, (long)op);
else
return (*op->ob_type->tp_print)(op, fp, flags);
} }
else { return 0;
(*op->ob_type->tp_print)(op, fp, flags);
}
}
}
prlevel--;
if (prlevel == 0)
StopPrint = 0;
} }
object * object *
reprobject(v) reprobject(v)
object *v; object *v;
{ {
object *w = NULL; if (intrcheck()) {
/* Hacks to make converting a long or recursive object interruptible */
prlevel++;
if (!StopPrint && intrcheck()) {
StopPrint = 1;
err_set(KeyboardInterrupt); err_set(KeyboardInterrupt);
return NULL;
} }
if (!StopPrint) { if (v == NULL)
if (v == NULL) { return newstringobject("<NULL>");
w = newstringobject("<NULL>");
}
else if (v->ob_type->tp_repr == NULL) { else if (v->ob_type->tp_repr == NULL) {
char buf[100]; char buf[120];
sprintf(buf, "<%.80s object at %lx>", sprintf(buf, "<%.80s object at %lx>",
v->ob_type->tp_name, (long)v); v->ob_type->tp_name, (long)v);
w = newstringobject(buf); return newstringobject(buf);
} }
else { else
w = (*v->ob_type->tp_repr)(v); return (*v->ob_type->tp_repr)(v);
}
if (StopPrint) {
XDECREF(w);
w = NULL;
}
}
prlevel--;
if (prlevel == 0)
StopPrint = 0;
return w;
} }
int 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). so there is exactly one (which is indestructible, by the way).
*/ */
static void static int
none_print(op, fp, flags) none_print(op, fp, flags)
object *op; object *op;
FILE *fp; FILE *fp;
int flags; int flags;
{ {
fprintf(fp, "None"); fprintf(fp, "None");
return 0;
} }
static object * static object *
@ -278,7 +251,8 @@ printrefs(fp)
fprintf(fp, "Remaining objects:\n"); fprintf(fp, "Remaining objects:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) { for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
fprintf(fp, "[%d] ", op->ob_refcnt); fprintf(fp, "[%d] ", op->ob_refcnt);
printobject(op, fp, 0); if (printobject(op, fp, 0) != 0)
err_clear();
putc('\n', fp); putc('\n', fp);
} }
} }

View file

@ -192,8 +192,10 @@ builtin_input(self, v)
int err; int err;
object *m, *d; object *m, *d;
flushline(); flushline();
if (v != NULL) if (v != NULL) {
printobject(v, out, PRINT_RAW); if (printobject(v, out, PRINT_RAW) != 0)
return NULL;
}
m = add_module("__main__"); m = add_module("__main__");
d = getmoduledict(m); d = getmoduledict(m);
return run_file(in, "<stdin>", expr_input, d, d); return run_file(in, "<stdin>", expr_input, d, d);
@ -450,8 +452,10 @@ builtin_raw_input(self, v)
{ {
FILE *out = sysgetfile("stdout", stdout); FILE *out = sysgetfile("stdout", stdout);
flushline(); flushline();
if (v != NULL) if (v != NULL) {
printobject(v, out, PRINT_RAW); if (printobject(v, out, PRINT_RAW) != 0)
return NULL;
}
return filegetline(sysget("stdin"), -1); return filegetline(sysget("stdin"), -1);
} }

View file

@ -428,7 +428,7 @@ eval_code(co, globals, locals, arg)
if (v != None) { if (v != None) {
flushline(); flushline();
softspace(sysget("stdout"), 1); softspace(sysget("stdout"), 1);
printobject(v, fp, 0); err = printobject(v, fp, 0);
flushline(); flushline();
} }
DECREF(v); DECREF(v);
@ -447,7 +447,7 @@ eval_code(co, globals, locals, arg)
softspace(sysget("stdout"), 0); softspace(sysget("stdout"), 0);
} }
else { else {
printobject(v, fp, 0); err = printobject(v, fp, 0);
} }
DECREF(v); DECREF(v);
break; break;
@ -933,7 +933,8 @@ prtrace(v, str)
char *str; char *str;
{ {
printf("%s ", 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"); printf("\n");
} }
#endif #endif