diff options
-rw-r--r-- | Modules/mpzmodule.c | 14 | ||||
-rw-r--r-- | Python/ceval.c | 1 | ||||
-rw-r--r-- | Python/traceback.c | 28 |
3 files changed, 31 insertions, 12 deletions
diff --git a/Modules/mpzmodule.c b/Modules/mpzmodule.c index 5ff0801..d0b9d7f 100644 --- a/Modules/mpzmodule.c +++ b/Modules/mpzmodule.c @@ -993,7 +993,9 @@ mpz_mpzcoerce(z) err_setstr(TypeError, "number coercion (to mpzobject) failed"); return NULL; } /* mpz_mpzcoerce() */ - + +static void mpz_divm(); + static object * MPZ_powm(self, args) object *self; @@ -1181,7 +1183,7 @@ MPZ_sqrtrem(self, args) } /* MPZ_sqrtrem() */ -void +static void #if __STDC__ mpz_divm(MP_INT *res, const MP_INT *num, const MP_INT *den, const MP_INT *mod) #else @@ -1544,7 +1546,7 @@ static struct methodlist mpz_methods[] = { {"hex", mpz_hex}, {"oct", mpz_oct}, #endif /* def MPZ_CONVERSIONS_AS_METHODS */ - {"binary", mpz_binary}, + {"binary", (object * (*) (object *, object *)) mpz_binary}, {NULL, NULL} /* sentinel */ }; @@ -1639,11 +1641,11 @@ static typeobject MPZtype = { sizeof(mpzobject), /*tp_size*/ 0, /*tp_itemsize*/ /* methods */ - mpz_dealloc, /*tp_dealloc*/ + (void (*) (object *)) mpz_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - mpz_getattr, /*tp_getattr*/ + (object * (*)(object *, char *)) mpz_getattr, /*tp_getattr*/ 0, /*tp_setattr*/ - mpz_compare, /*tp_compare*/ + (int (*) (object *, object *)) mpz_compare, /*tp_compare*/ mpz_repr, /*tp_repr*/ &mpz_as_number, /*tp_as_number*/ }; diff --git a/Python/ceval.c b/Python/ceval.c index 425e2a0..6ffbb46 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1710,7 +1710,6 @@ printtraceback(f) { object *v = tb_fetch(); if (v != NULL) { - writestring("Stack backtrace (innermost last):\n", f); tb_print(v, f); DECREF(v); } diff --git a/Python/traceback.c b/Python/traceback.c index 6ed1917..f14f0ec 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -219,14 +219,23 @@ tb_displayline(f, filename, lineno) } static void -tb_printinternal(tb, f) +tb_printinternal(tb, f, limit) tracebackobject *tb; object *f; + int limit; { + int depth = 0; + tracebackobject *tb1 = tb; + while (tb1 != NULL) { + depth++; + tb1 = tb1->tb_next; + } while (tb != NULL && !intrcheck()) { - tb_displayline(f, - getstringvalue(tb->tb_frame->f_code->co_filename), - tb->tb_lineno); + if (depth <= limit) + tb_displayline(f, + getstringvalue(tb->tb_frame->f_code->co_filename), + tb->tb_lineno); + depth--; tb = tb->tb_next; } } @@ -236,6 +245,8 @@ tb_print(v, f) object *v; object *f; { + object *limitv; + int limit = 1000; if (v == NULL) return 0; if (!is_tracebackobject(v)) { @@ -243,6 +254,13 @@ tb_print(v, f) return -1; } sysset("last_traceback", v); - tb_printinternal((tracebackobject *)v, f); + limitv = sysget("tracebacklimit"); + if (limitv && is_intobject(limitv)) { + limit = getintvalue(limitv); + if (limit <= 0) + return 0; + } + writestring("Traceback (innermost last):\n", f); + tb_printinternal((tracebackobject *)v, f, limit); return 0; } |