mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
printobject now returns an error code
This commit is contained in:
parent
dd0108081b
commit
909336104b
10 changed files with 70 additions and 86 deletions
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue