Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 2088:1940e1e0cedf legacy-trunk
Use new instancebinop interface
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Sat, 07 Jan 1995 12:40:10 +0000 |
| parents | d0d0a69b5ca3 |
| children | b7be0382f9ee |
line wrap: on
line diff
--- a/Python/ceval.c Sat Jan 07 12:39:01 1995 +0000 +++ b/Python/ceval.c Sat Jan 07 12:40:10 1995 +0000 @@ -68,7 +68,7 @@ static object *sub PROTO((object *, object *)); static object *mul PROTO((object *, object *)); static object *divide PROTO((object *, object *)); -static object *rem PROTO((object *, object *)); +static object *mod PROTO((object *, object *)); static object *neg PROTO((object *)); static object *pos PROTO((object *)); static object *not PROTO((object *)); @@ -571,7 +571,7 @@ case BINARY_MODULO: w = POP(); v = POP(); - x = rem(v, w); + x = mod(v, w); DECREF(v); DECREF(w); PUSH(x); @@ -1742,18 +1742,18 @@ } -#define BINOP(opname, ropname) \ - do { \ - if (is_instanceobject(v) || is_instanceobject(w)) \ - return instancebinop(v, w, opname, ropname); \ - } while (0) +#define BINOP(opname, ropname, thisfunc) \ + if (!is_instanceobject(v) && !is_instanceobject(w)) \ + ; \ + else \ + return instancebinop(v, w, opname, ropname, thisfunc) static object * or(v, w) object *v, *w; { - BINOP("__or__", "__ror__"); + BINOP("__or__", "__ror__", or); if (v->ob_type->tp_as_number != NULL) { object *x; object * (*f) FPROTO((object *, object *)); @@ -1774,7 +1774,7 @@ xor(v, w) object *v, *w; { - BINOP("__xor__", "__rxor__"); + BINOP("__xor__", "__rxor__", xor); if (v->ob_type->tp_as_number != NULL) { object *x; object * (*f) FPROTO((object *, object *)); @@ -1795,7 +1795,7 @@ and(v, w) object *v, *w; { - BINOP("__and__", "__rand__"); + BINOP("__and__", "__rand__", and); if (v->ob_type->tp_as_number != NULL) { object *x; object * (*f) FPROTO((object *, object *)); @@ -1816,7 +1816,7 @@ lshift(v, w) object *v, *w; { - BINOP("__lshift__", "__rlshift__"); + BINOP("__lshift__", "__rlshift__", lshift); if (v->ob_type->tp_as_number != NULL) { object *x; object * (*f) FPROTO((object *, object *)); @@ -1837,7 +1837,7 @@ rshift(v, w) object *v, *w; { - BINOP("__rshift__", "__rrshift__"); + BINOP("__rshift__", "__rrshift__", rshift); if (v->ob_type->tp_as_number != NULL) { object *x; object * (*f) FPROTO((object *, object *)); @@ -1858,7 +1858,7 @@ add(v, w) object *v, *w; { - BINOP("__add__", "__radd__"); + BINOP("__add__", "__radd__", add); if (v->ob_type->tp_as_sequence != NULL) return (*v->ob_type->tp_as_sequence->sq_concat)(v, w); else if (v->ob_type->tp_as_number != NULL) { @@ -1878,7 +1878,7 @@ sub(v, w) object *v, *w; { - BINOP("__sub__", "__rsub__"); + BINOP("__sub__", "__rsub__", sub); if (v->ob_type->tp_as_number != NULL) { object *x; if (coerce(&v, &w) != 0) @@ -1898,7 +1898,7 @@ { typeobject *tp; tp = v->ob_type; - BINOP("__mul__", "__rmul__"); + BINOP("__mul__", "__rmul__", mul); if (tp->tp_as_number != NULL && w->ob_type->tp_as_sequence != NULL && !is_instanceobject(v)) { @@ -1942,7 +1942,7 @@ divide(v, w) object *v, *w; { - BINOP("__div__", "__rdiv__"); + BINOP("__div__", "__rdiv__", divide); if (v->ob_type->tp_as_number != NULL) { object *x; if (coerce(&v, &w) != 0) @@ -1957,13 +1957,13 @@ } static object * -rem(v, w) +mod(v, w) object *v, *w; { if (is_stringobject(v)) { return formatstring(v, w); } - BINOP("__mod__", "__rmod__"); + BINOP("__mod__", "__rmod__", mod); if (v->ob_type->tp_as_number != NULL) { object *x; if (coerce(&v, &w) != 0)
