diff options
-rw-r--r-- | Include/object.h | 4 | ||||
-rw-r--r-- | Modules/stdwinmodule.c | 3 | ||||
-rw-r--r-- | Python/pythonmain.c | 6 | ||||
-rw-r--r-- | Python/traceback.c | 10 |
4 files changed, 14 insertions, 9 deletions
diff --git a/Include/object.h b/Include/object.h index 5a93000..750cd80 100644 --- a/Include/object.h +++ b/Include/object.h @@ -162,7 +162,7 @@ typedef struct _typeobject { /* Methods to implement standard operations */ void (*tp_dealloc) FPROTO((object *)); - void (*tp_print) FPROTO((object *, FILE *, int)); + int (*tp_print) FPROTO((object *, FILE *, int)); object *(*tp_getattr) FPROTO((object *, char *)); int (*tp_setattr) FPROTO((object *, char *, object *)); int (*tp_compare) FPROTO((object *, object *)); @@ -180,7 +180,7 @@ extern typeobject Typetype; /* The type of type objects */ #define is_typeobject(op) ((op)->ob_type == &Typetype) /* Generic operations on objects */ -extern void printobject PROTO((object *, FILE *, int)); +extern int printobject PROTO((object *, FILE *, int)); extern object * reprobject PROTO((object *)); extern int cmpobject PROTO((object *, object *)); extern object *getattr PROTO((object *, char *)); diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c index 494b15e..9b436af 100644 --- a/Modules/stdwinmodule.c +++ b/Modules/stdwinmodule.c @@ -1286,13 +1286,14 @@ window_dealloc(wp) free((char *)wp); } -static void +static int window_print(wp, fp, flags) windowobject *wp; FILE *fp; int flags; { fprintf(fp, "<window titled '%s'>", getstringvalue(wp->w_title)); + return 0; } static object * diff --git a/Python/pythonmain.c b/Python/pythonmain.c index b855520..9fa1a58 100644 --- a/Python/pythonmain.c +++ b/Python/pythonmain.c @@ -289,10 +289,12 @@ print_error() object *exception, *v; err_get(&exception, &v); fprintf(stderr, "Unhandled exception: "); - printobject(exception, stderr, PRINT_RAW); + if (printobject(exception, stderr, PRINT_RAW) != 0) + err_clear(); if (v != NULL && v != None) { fprintf(stderr, ": "); - printobject(v, stderr, PRINT_RAW); + if (printobject(v, stderr, PRINT_RAW) != 0) + err_clear(); } fprintf(stderr, "\n"); XDECREF(exception); diff --git a/Python/traceback.c b/Python/traceback.c index 0b6904f..e71f6fa 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -186,12 +186,14 @@ tb_printinternal(tb, fp) FILE *fp; { while (tb != NULL) { - if (intrcheck()) { - fprintf(fp, "[interrupted]\n"); + if (intrcheck()) break; - } fprintf(fp, " File \""); - printobject(tb->tb_frame->f_code->co_filename, fp, PRINT_RAW); + if (printobject(tb->tb_frame->f_code->co_filename, + fp, PRINT_RAW) != 0) { + err_clear(); + break; + } fprintf(fp, "\", line %d\n", tb->tb_lineno); tb_displayline(fp, getstringvalue(tb->tb_frame->f_code->co_filename), |