]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
* mpzmodule.c: cast some methods to the proper type.
authorGuido van Rossum <guido@python.org>
Fri, 17 Dec 1993 12:09:14 +0000 (12:09 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 17 Dec 1993 12:09:14 +0000 (12:09 +0000)
* traceback.c (tb_print): use sys.tracebacklimit as a maximum number of
  traceback entries to print (default 1000).
* ceval.c (printtraceback): Don't print stack trace header -- this is now
  done by tb_print().

Modules/mpzmodule.c
Python/ceval.c
Python/traceback.c

index 5ff0801954ec60ae1acd0ee05b2876c263189352..d0b9d7f9a9aa69509f9675a93c21009b2fc76c3a 100644 (file)
@@ -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*/
 };
index 425e2a06a6cf634b60d1c92ea134493c36e7a847..6ffbb465f55c4335c810f5545fae6a8dd7180a15 100644 (file)
@@ -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);
        }
index 6ed19178efcbb73ec0d970899f282fe9fc059c68..f14f0ecb79a48d986862a21c2a37677f248597f9 100644 (file)
@@ -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;
 }