diff options
| author | Guido van Rossum <guido@python.org> | 1996-12-05 23:17:11 +0000 | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1996-12-05 23:17:11 +0000 | 
| commit | 150b2df6824e98ac8b073db8a82384d1a56a7849 (patch) | |
| tree | ab1d9f6e654d0a5fd7946d3b79752bf402ec2624 | |
| parent | 3afb5959aa6e401c96ef65deea5ae3ccaedeb011 (diff) | |
| download | cpython-git-150b2df6824e98ac8b073db8a82384d1a56a7849.tar.gz | |
Change the Don Beaudry hack into the Don B + Jim F hack; now, if *any*
base class is special it gets invoked.
Make gcc -Wall happy.
| -rw-r--r-- | Python/ceval.c | 54 | 
1 files changed, 26 insertions, 28 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 95e4b30d10..cee606b5ea 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -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;  | 
