]> granicus.if.org Git - python/commitdiff
Change the Don Beaudry hack into the Don B + Jim F hack; now, if *any*
authorGuido van Rossum <guido@python.org>
Thu, 5 Dec 1996 23:17:11 +0000 (23:17 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 5 Dec 1996 23:17:11 +0000 (23:17 +0000)
base class is special it gets invoked.

Make gcc -Wall happy.

Python/ceval.c

index 95e4b30d1093e248c19b5aea9d533b285feb5a2d..cee606b5eadc2dc10e3f16be5c7bff33096ed62e 100644 (file)
@@ -319,8 +319,8 @@ eval_code2(co, globals, locals,
        object *owner;
 {
        register unsigned char *next_instr;
-       register int opcode;    /* Current opcode */
-       register int oparg;     /* Current opcode argument, if any */
+       register int opcode = 0; /* Current opcode */
+       register int oparg = 0; /* Current opcode argument, if any */
        register object **stack_pointer;
        register enum why_code why; /* Reason for block stack unwind */
        register int err;       /* Error status -- nonzero if error */
@@ -330,8 +330,8 @@ eval_code2(co, globals, locals,
        register object *u;
        register object *t;
        register frameobject *f; /* Current frame */
-       register object **fastlocals;
-       object *retval;         /* Return value */
+       register object **fastlocals = NULL;
+       object *retval = NULL;  /* Return value */
 #ifdef SUPPORT_OBSOLETE_ACCESS
        int defmode = 0;        /* Default access mode for new variables */
 #endif
@@ -1793,8 +1793,8 @@ eval_code2(co, globals, locals,
                                break;
                        }
                        if (b->b_type == SETUP_FINALLY ||
-                                       b->b_type == SETUP_EXCEPT &&
-                                       why == WHY_EXCEPTION) {
+                           (b->b_type == SETUP_EXCEPT &&
+                            why == WHY_EXCEPTION)) {
                                if (why == WHY_EXCEPTION) {
                                        object *exc, *val, *tb;
                                        err_fetch(&exc, &val, &tb);
@@ -2055,7 +2055,7 @@ or(v, w)
 {
        BINOP("__or__", "__ror__", or);
        if (v->ob_type->tp_as_number != NULL) {
-               object *x;
+               object *x = NULL;
                object * (*f) FPROTO((object *, object *));
                if (coerce(&v, &w) != 0)
                        return NULL;
@@ -2076,7 +2076,7 @@ xor(v, w)
 {
        BINOP("__xor__", "__rxor__", xor);
        if (v->ob_type->tp_as_number != NULL) {
-               object *x;
+               object *x = NULL;
                object * (*f) FPROTO((object *, object *));
                if (coerce(&v, &w) != 0)
                        return NULL;
@@ -2097,7 +2097,7 @@ and(v, w)
 {
        BINOP("__and__", "__rand__", and);
        if (v->ob_type->tp_as_number != NULL) {
-               object *x;
+               object *x = NULL;
                object * (*f) FPROTO((object *, object *));
                if (coerce(&v, &w) != 0)
                        return NULL;
@@ -2118,7 +2118,7 @@ lshift(v, w)
 {
        BINOP("__lshift__", "__rlshift__", lshift);
        if (v->ob_type->tp_as_number != NULL) {
-               object *x;
+               object *x = NULL;
                object * (*f) FPROTO((object *, object *));
                if (coerce(&v, &w) != 0)
                        return NULL;
@@ -2139,7 +2139,7 @@ rshift(v, w)
 {
        BINOP("__rshift__", "__rrshift__", rshift);
        if (v->ob_type->tp_as_number != NULL) {
-               object *x;
+               object *x = NULL;
                object * (*f) FPROTO((object *, object *));
                if (coerce(&v, &w) != 0)
                        return NULL;
@@ -2379,7 +2379,7 @@ PyEval_CallObjectWithKeywords(func, arg, kw)
                return NULL;
        }
 
-        if (call = func->ob_type->tp_call)
+        if ((call = func->ob_type->tp_call) != NULL)
                 result = (*call)(func, arg, kw);
         else if (is_instancemethodobject(func) || is_funcobject(func))
                result = call_function(func, arg, kw);
@@ -2890,22 +2890,6 @@ build_class(methods, bases, name)
                err_setstr(SystemError, "build_class with non-tuple bases");
                return NULL;
        }
-       if (gettuplesize(bases) > 0) {
-               object *base;
-               base = GETTUPLEITEM(bases, 0);
-               /* Call the base's *type*, if it is callable.
-                  This code is a hook for Donald Beaudry's type extensions.
-                  In unexended Python it will never be triggered since its
-                  types are not callable. */
-               if (base->ob_type->ob_type->tp_call) {
-                       object *args;
-                       object *class;
-                       args = mkvalue("(OOO)", name, bases, methods);
-                       class = call_object((object *)base->ob_type, args);
-                       DECREF(args);
-                       return class;
-               }
-       }
        if (!is_dictobject(methods)) {
                err_setstr(SystemError, "build_class with non-dictionary");
                return NULL;
@@ -2917,6 +2901,20 @@ build_class(methods, bases, name)
        for (i = gettuplesize(bases); --i >= 0; ) {
                object *base = GETTUPLEITEM(bases, i);
                if (!is_classobject(base)) {
+                       /* Call the base's *type*, if it is callable.
+                          This code is a hook for Donald Beaudry's
+                          and Jim Fulton's type extensions.  In
+                          unexended Python it will never be triggered
+                          since its types are not callable. */
+                       if (base->ob_type->ob_type->tp_call) {
+                               object *args;
+                               object *class;
+                               args = mkvalue("(OOO)", name, bases, methods);
+                               class = call_object((object *)base->ob_type,
+                                                   args);
+                               DECREF(args);
+                               return class;
+                       }
                        err_setstr(TypeError,
                                "base is not a class object");
                        return NULL;