From: Finn B. <bc...@us...> - 2001-01-31 13:34:37
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv14267 Modified Files: PyComplex.java PyFloat.java PyInteger.java PyLong.java PyInstance.java PyNone.java PyObject.java PyList.java PySequence.java Log Message: Support for the reworked Coercion Model (pep-0208). Index: PyComplex.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyComplex.java,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -r2.1 -r2.2 *** PyComplex.java 1999/05/17 19:59:38 2.1 --- PyComplex.java 2001/01/31 13:34:34 2.2 *************** *** 7,14 **** static PyComplex J = new PyComplex(0, 1.); - public static PyClass __class__; - public PyComplex(double r, double i) { - super(__class__); real = r; imag = i; --- 7,11 ---- *************** *** 89,143 **** } ! public PyObject __add__(PyObject o) { ! PyComplex c = (PyComplex)o; return new PyComplex(real+c.real, imag+c.imag); } ! public PyObject __sub__(PyObject o) { ! PyComplex c = (PyComplex)o; ! return new PyComplex(real-c.real, imag-c.imag); } ! public PyObject __mul__(PyObject o) { ! PyComplex c = (PyComplex)o; ! return new PyComplex(real*c.real-imag*c.imag, real*c.imag+imag*c.real); } ! public PyObject __div__(PyObject o) { ! PyComplex c = (PyComplex)o; ! double denom = c.real*c.real+c.imag*c.imag; if (denom == 0) throw Py.ZeroDivisionError("complex division"); ! return new PyComplex((real*c.real + imag*c.imag)/denom, ! (imag*c.real - real*c.imag)/denom); } ! public PyObject __mod__(PyObject o) { ! PyComplex z = (PyComplex)__div__(o); z.real = Math.floor(z.real); z.imag = 0.0; ! return __sub__(z.__mul__(o)); } ! public PyObject __divmod__(PyObject o) { ! PyComplex z = (PyComplex)__div__(o); z.real = Math.floor(z.real); z.imag = 0.0; ! return new PyTuple(new PyObject[] {z, __sub__(z.__mul__(o))}); } ! private PyObject ipow(int iexp) { int pow = iexp; if (pow < 0) pow = -pow; ! double xr = real; ! double xi = imag; double zr = 1; --- 86,222 ---- } + private final boolean canCoerce(PyObject other) { + return other instanceof PyComplex || + other instanceof PyFloat || + other instanceof PyInteger || + other instanceof PyLong; + } + + private final PyComplex coerce(PyObject other) { + if (other instanceof PyComplex) + return (PyComplex) other; + if (other instanceof PyFloat) + return new PyComplex(((PyFloat)other).getValue(), 0); + if (other instanceof PyInteger) + return new PyComplex((double)((PyInteger)other).getValue(), 0); + if (other instanceof PyLong) + return new PyComplex(((PyLong)other).doubleValue(), 0); + throw Py.TypeError("xxx"); + } ! public PyObject __add__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! PyComplex c = coerce(right); return new PyComplex(real+c.real, imag+c.imag); } + + public PyObject __radd__(PyObject left) { + return __add__(left); + } + + private final static PyObject _sub(PyComplex o1, PyComplex o2) { + return new PyComplex(o1.real-o2.real, o1.imag-o2.imag); + } + + public PyObject __sub__(PyObject right) { + if (!canCoerce(right)) + return null; + return _sub(this, coerce(right)); + } + + public PyObject __rsub__(PyObject left) { + if (!canCoerce(left)) + return null; + return _sub(coerce(left), this); + } ! private final static PyObject _mul(PyComplex o1, PyComplex o2) { ! return new PyComplex(o1.real*o2.real-o1.imag*o2.imag, ! o1.real*o2.imag+o1.imag*o2.real); } ! public PyObject __mul__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return _mul(this, coerce(right)); } ! public PyObject __rmul__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return _mul(coerce(left), this); ! } ! ! private final static PyObject _div(PyComplex o1, PyComplex o2) { ! double denom = o2.real*o2.real+o2.imag*o2.imag; if (denom == 0) throw Py.ZeroDivisionError("complex division"); ! return new PyComplex((o1.real*o2.real + o1.imag*o2.imag)/denom, ! (o1.imag*o2.real - o1.real*o2.imag)/denom); ! } ! ! public PyObject __div__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return _div(this, coerce(right)); ! } ! ! public PyObject __rdiv__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return _div(coerce(left), this); } + + public PyObject __mod__(PyObject right) { + if (!canCoerce(right)) + return null; + return _mod(this, coerce(right)); + } + + public PyObject __rmod__(PyObject left) { + if (!canCoerce(left)) + return null; + return _mod(coerce(left), this); + } ! private static PyObject _mod(PyComplex value, PyComplex right) { ! PyComplex z = (PyComplex)value.__div__(right); z.real = Math.floor(z.real); z.imag = 0.0; ! return value.__sub__(z.__mul__(right)); } ! public PyObject __divmod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return _divmod(this, coerce(right)); ! } ! ! public PyObject __rdivmod__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return _divmod(coerce(left), this); ! } + private static PyObject _divmod(PyComplex value, PyComplex right) { + PyComplex z = (PyComplex)value.__div__(right); + z.real = Math.floor(z.real); z.imag = 0.0; ! return new PyTuple(new PyObject[] {z, value.__sub__(z.__mul__(right))}); } ! private static PyObject ipow(PyComplex value, int iexp) { int pow = iexp; if (pow < 0) pow = -pow; ! double xr = value.real; ! double xi = value.imag; double zr = 1; *************** *** 171,179 **** throw Py.ValueError("complex modulo"); } ! ! double xr = real; ! double xi = imag; ! double yr = ((PyComplex)right).real; ! double yi = ((PyComplex)right).imag; if (yr == 0 && yi == 0) { --- 250,269 ---- throw Py.ValueError("complex modulo"); } ! if (!canCoerce(right)) ! return null; ! return _pow(this, coerce(right)); ! } ! ! public PyObject __rpow__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return _pow(coerce(left), this); ! } ! ! public static PyObject _pow(PyComplex value, PyComplex right) { ! double xr = value.real; ! double xi = value.imag; ! double yr = right.real; ! double yi = right.imag; if (yr == 0 && yi == 0) { *************** *** 190,194 **** int iexp = (int)yr; if (yi == 0 && yr == (double)iexp && iexp >= -128 && iexp <= 128) { ! return ipow(iexp); } --- 280,284 ---- int iexp = (int)yr; if (yi == 0 && yr == (double)iexp && iexp >= -128 && iexp <= 128) { ! return ipow(value, iexp); } *************** *** 236,239 **** --- 326,339 ---- public PyComplex conjugate() { return new PyComplex(real, -imag); + } + + public boolean isMappingType() { return false; } + public boolean isSequenceType() { return false; } + + // __class__ boilerplate -- see PyObject for details + public static PyClass __class__; + + protected PyClass getPyClass() { + return __class__; } } Index: PyFloat.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyFloat.java,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** PyFloat.java 2000/12/11 18:39:45 2.3 --- PyFloat.java 2001/01/31 13:34:35 2.4 *************** *** 90,113 **** } public PyObject __add__(PyObject right) { ! return new PyFloat(value+((PyFloat)right).value); } public PyObject __sub__(PyObject right) { ! return new PyFloat(value-((PyFloat)right).value); } public PyObject __mul__(PyObject right) { ! return new PyFloat(value*((PyFloat)right).value); } public PyObject __div__(PyObject right) { ! double y = ((PyFloat)right).value; ! if (y == 0) throw Py.ZeroDivisionError("float division"); ! return new PyFloat(value/y); } ! private double modulo(double x, double y) { if (y == 0) throw Py.ZeroDivisionError("float modulo"); --- 90,166 ---- } + private static final boolean canCoerce(PyObject other) { + return other instanceof PyFloat || other instanceof PyInteger || + other instanceof PyLong; + } + + private static final double coerce(PyObject other) { + if (other instanceof PyFloat) + return ((PyFloat) other).value; + else if (other instanceof PyInteger) + return ((PyInteger) other).getValue(); + else if (other instanceof PyLong) + return ((PyLong) other).doubleValue(); + else + throw Py.TypeError("xxx"); + } + + + public PyObject __add__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! return new PyFloat(value + rightv); } + public PyObject __radd__(PyObject left) { + return __add__(left); + } + public PyObject __sub__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! return new PyFloat(value - rightv); } + public PyObject __rsub__(PyObject left) { + if (!canCoerce(left)) + return null; + double leftv = coerce(left); + return new PyFloat(leftv - value); + } + public PyObject __mul__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! return new PyFloat(value * rightv); ! } ! ! public PyObject __rmul__(PyObject left) { ! return __mul__(left); } public PyObject __div__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! if (rightv == 0) ! throw Py.ZeroDivisionError("float division"); ! return new PyFloat(value / rightv); ! } ! ! public PyObject __rdiv__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! double leftv = coerce(left); ! if (value == 0) throw Py.ZeroDivisionError("float division"); ! return new PyFloat(leftv / value); } ! private static double modulo(double x, double y) { if (y == 0) throw Py.ZeroDivisionError("float modulo"); *************** *** 119,143 **** public PyObject __mod__(PyObject right) { ! return new PyFloat(modulo(value, ((PyFloat)right).value)); } public PyObject __divmod__(PyObject right) { ! double y = ((PyFloat)right).value; ! if (y == 0) throw Py.ZeroDivisionError("float division"); ! double z = Math.floor(value/y); return new PyTuple( ! new PyObject[] {new PyFloat(z), new PyFloat(value-z*y)} ); } public PyObject __pow__(PyObject right, PyObject modulo) { ! // Rely completely on Java's pow function ! double iw = ((PyFloat)right).value; if (iw == 0) { if (modulo != null) ! return new PyFloat(modulo(1.0, ((PyFloat)modulo).value)); return new PyFloat(1.0); } --- 172,239 ---- public PyObject __mod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! return new PyFloat(modulo(value, rightv)); } + public PyObject __rmod__(PyObject left) { + if (!canCoerce(left)) + return null; + double leftv = coerce(left); + return new PyFloat(modulo(leftv, value)); + } + public PyObject __divmod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! double rightv = coerce(right); ! ! if (rightv == 0) throw Py.ZeroDivisionError("float division"); ! double z = Math.floor(value / rightv); return new PyTuple( ! new PyObject[] {new PyFloat(z), new PyFloat(value-z*rightv)} ); } + public PyObject __rdivmod__(PyObject left) { + if (!canCoerce(left)) + return null; + double leftv = coerce(left); + + if (value == 0) + throw Py.ZeroDivisionError("float division"); + double z = Math.floor(leftv / value); + + return new PyTuple( + new PyObject[] {new PyFloat(z), new PyFloat(leftv-z*value)} + ); + } + + public PyObject __pow__(PyObject right, PyObject modulo) { ! if (!canCoerce(right)) ! return null; ! if (modulo != null && !canCoerce(modulo)) ! return null; ! ! return _pow(value, coerce(right), modulo); ! } ! ! public PyObject __rpow__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! ! return _pow(coerce(left), value, null); ! } ! ! private static PyFloat _pow(double value, double iw, PyObject modulo) { ! // Rely completely on Java's pow function if (iw == 0) { if (modulo != null) ! return new PyFloat(modulo(1.0, coerce(modulo))); return new PyFloat(1.0); } *************** *** 152,156 **** return new PyFloat(ret); } else { ! return new PyFloat(modulo(ret, ((PyFloat)modulo).value)); } } --- 248,252 ---- return new PyFloat(ret); } else { ! return new PyFloat(modulo(ret, coerce(modulo))); } } *************** *** 188,191 **** --- 284,297 ---- public PyComplex __complex__() { return new PyComplex(value, 0.); + } + + public boolean isMappingType() { return false; } + public boolean isSequenceType() { return false; } + + // __class__ boilerplate -- see PyObject for details + public static PyClass __class__; + + protected PyClass getPyClass() { + return __class__; } } Index: PyInteger.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyInteger.java,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** PyInteger.java 2000/12/11 18:39:45 2.5 --- PyInteger.java 2001/01/31 13:34:35 2.6 *************** *** 65,89 **** } public PyObject __add__(PyObject right) { int a = value; ! int b = ((PyInteger)right).value; int x = a + b; if ((x^a) < 0 && (x^b) < 0) throw Py.OverflowError("integer addition: "+this+" + "+right); ! return Py.newInteger(x); //new PyInteger(x); } ! public PyObject __sub__(PyObject right) { ! int a = value; ! int b = ((PyInteger)right).value; int x = a - b; if ((x^a) < 0 && (x^~b) < 0) ! throw Py.OverflowError("integer subtraction: "+this+" - "+right); return Py.newInteger(x); } public PyObject __mul__(PyObject right) { double x = (double)value; ! x *= ((PyInteger)right).value; //long x = ((long)value)*((PyInteger)right).value; //System.out.println("mul: "+this+" * "+right+" = "+x); --- 65,124 ---- } + private static final boolean canCoerce(PyObject other) { + return other instanceof PyInteger; + } + + private static final int coerce(PyObject other) { + if (other instanceof PyInteger) + return ((PyInteger) other).value; + else + throw Py.TypeError("xxx"); + } + + public PyObject __add__(PyObject right) { + if (!canCoerce(right)) + return null; + int rightv = coerce(right); int a = value; ! int b = rightv; int x = a + b; if ((x^a) < 0 && (x^b) < 0) throw Py.OverflowError("integer addition: "+this+" + "+right); ! return Py.newInteger(x); ! } ! public PyObject __radd__(PyObject left) { ! return __add__(left); } ! private static PyInteger _sub(int a, int b) { int x = a - b; if ((x^a) < 0 && (x^~b) < 0) ! throw Py.OverflowError("integer subtraction: "+a+" - "+b); return Py.newInteger(x); } + public PyObject __sub__(PyObject right) { + if (!canCoerce(right)) + return null; + return _sub(value, coerce(right)); + } + + public PyObject __rsub__(PyObject left) { + if (!canCoerce(left)) + return null; + return _sub(coerce(left), value); + } + public PyObject __mul__(PyObject right) { + if (right instanceof PySequence) + return ((PySequence) right).repeat(value); + + if (!canCoerce(right)) + return null; + int rightv = coerce(right); + double x = (double)value; ! x *= rightv; //long x = ((long)value)*((PyInteger)right).value; //System.out.println("mul: "+this+" * "+right+" = "+x); *************** *** 95,101 **** } // Getting signs correct for integer division // This convention makes sense when you consider it in tandem with modulo ! private int divide(int x, int y) { if (y == 0) throw Py.ZeroDivisionError("integer division or modulo"); --- 130,140 ---- } + public PyObject __rmul__(PyObject left) { + return __mul__(left); + } + // Getting signs correct for integer division // This convention makes sense when you consider it in tandem with modulo ! private static int divide(int x, int y) { if (y == 0) throw Py.ZeroDivisionError("integer division or modulo"); *************** *** 112,139 **** public PyObject __div__(PyObject right) { ! return Py.newInteger(divide(value, ((PyInteger)right).value)); } ! private int modulo(int x, int y, int xdivy) { return x - xdivy*y; } public PyObject __mod__(PyObject right) { ! int x = ((PyInteger)right).value; ! return Py.newInteger(modulo(value, x, divide(value, x))); } public PyObject __divmod__(PyObject right) { ! int x = ((PyInteger)right).value; ! int xdivy = divide(value, x); return new PyTuple(new PyObject[] { new PyInteger(xdivy), ! new PyInteger(modulo(value, x, xdivy)) }); } public PyObject __pow__(PyObject right, PyObject modulo) { int mod = 0; - int pow = ((PyInteger)right).value; long tmp = value; boolean neg = false; --- 151,217 ---- public PyObject __div__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return Py.newInteger(divide(value, coerce(right))); } ! public PyObject __rdiv__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return Py.newInteger(divide(coerce(left), value)); ! } ! ! private static int modulo(int x, int y, int xdivy) { return x - xdivy*y; } public PyObject __mod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! int rightv = coerce(right); ! return Py.newInteger(modulo(value, rightv, divide(value, rightv))); } + public PyObject __rmod__(PyObject left) { + if (!canCoerce(left)) + return null; + int leftv = coerce(left); + return Py.newInteger(modulo(leftv, value, divide(leftv, value))); + } + public PyObject __divmod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! int rightv = coerce(right); ! ! int xdivy = divide(value, rightv); return new PyTuple(new PyObject[] { new PyInteger(xdivy), ! new PyInteger(modulo(value, rightv, xdivy)) }); } public PyObject __pow__(PyObject right, PyObject modulo) { + if (!canCoerce(right)) + return null; + + if (modulo != null && !canCoerce(modulo)) + return null; + + return _pow(value, coerce(right), modulo); + } + + public PyObject __rpow__(PyObject left, PyObject modulo) { + if (!canCoerce(left)) + return null; + + if (modulo != null && !canCoerce(modulo)) + return null; + + return _pow(coerce(left), value, modulo); + } + + private static PyInteger _pow(int value, int pow, PyObject modulo) { int mod = 0; long tmp = value; boolean neg = false; *************** *** 152,156 **** if (modulo != null) { ! mod = ((PyInteger)modulo).value; if (mod == 0) { throw Py.ValueError("pow(x, y, z) with z==0"); --- 230,234 ---- if (modulo != null) { ! mod = coerce(modulo); if (mod == 0) { throw Py.ValueError("pow(x, y, z) with z==0"); *************** *** 196,219 **** public PyObject __lshift__(PyObject right) { ! int shift = ((PyInteger)right).value; ! if (shift > 31) return new PyInteger(0); ! return Py.newInteger(value << shift); } public PyObject __rshift__(PyObject right) { ! return Py.newInteger(value >>> ((PyInteger)right).value); } public PyObject __and__(PyObject right) { ! return Py.newInteger(value & ((PyInteger)right).value); } public PyObject __xor__(PyObject right) { ! return Py.newInteger(value ^ ((PyInteger)right).value); } public PyObject __or__(PyObject right) { ! return Py.newInteger(value | ((PyInteger)right).value); } --- 274,326 ---- public PyObject __lshift__(PyObject right) { ! int rightv; ! if (right instanceof PyInteger) ! rightv = ((PyInteger)right).value; ! else ! return null; ! ! if (rightv > 31) return new PyInteger(0); ! return Py.newInteger(value << rightv); } public PyObject __rshift__(PyObject right) { ! int rightv; ! if (right instanceof PyInteger) ! rightv = ((PyInteger)right).value; ! else ! return null; ! ! return Py.newInteger(value >>> rightv); } public PyObject __and__(PyObject right) { ! int rightv; ! if (right instanceof PyInteger) ! rightv = ((PyInteger)right).value; ! else ! return null; ! ! return Py.newInteger(value & rightv); } public PyObject __xor__(PyObject right) { ! int rightv; ! if (right instanceof PyInteger) ! rightv = ((PyInteger)right).value; ! else ! return null; ! ! return Py.newInteger(value ^ rightv); } public PyObject __or__(PyObject right) { ! int rightv; ! if (right instanceof PyInteger) ! rightv = ((PyInteger)right).value; ! else ! return null; ! ! return Py.newInteger(value | rightv); } Index: PyLong.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyLong.java,v retrieving revision 2.6 retrieving revision 2.7 diff -C2 -r2.6 -r2.7 *** PyLong.java 2000/12/20 13:44:43 2.6 --- PyLong.java 2001/01/31 13:34:35 2.7 *************** *** 109,122 **** } public PyObject __add__(PyObject right) { ! return new PyLong(value.add(((PyLong)right).value)); } public PyObject __sub__(PyObject right) { ! return new PyLong(value.subtract(((PyLong)right).value)); } public PyObject __mul__(PyObject right) { ! return new PyLong(value.multiply(((PyLong)right).value)); } --- 109,161 ---- } + private static final boolean canCoerce(PyObject other) { + return other instanceof PyLong || other instanceof PyInteger; + } + + private static final BigInteger coerce(PyObject other) { + if (other instanceof PyLong) + return ((PyLong) other).value; + else if (other instanceof PyInteger) + return java.math.BigInteger.valueOf(((PyInteger) other).getValue()); + else + throw Py.TypeError("xxx"); + } + + public PyObject __add__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.add(coerce(right))); } + public PyObject __radd__(PyObject left) { + return __add__(left); + } + public PyObject __sub__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.subtract(coerce(right))); ! } ! ! public PyObject __rsub__(PyObject left) { ! return new PyLong(coerce(left).subtract(value)); } public PyObject __mul__(PyObject right) { ! if (right instanceof PySequence) ! return ((PySequence) right).repeat(coerceInt(this)); ! ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.multiply(coerce(right))); ! } ! ! public PyObject __rmul__(PyObject left) { ! if (left instanceof PySequence) ! return ((PySequence) left).repeat(coerceInt(this)); ! if (!canCoerce(left)) ! return null; ! return new PyLong(coerce(left).multiply(value)); } *************** *** 139,143 **** public PyObject __div__(PyObject right) { ! return new PyLong(divide(value, ((PyLong)right).value)); } --- 178,190 ---- public PyObject __div__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(divide(value, coerce(right))); ! } ! ! public PyObject __rdiv__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return new PyLong(divide(coerce(left), value)); } *************** *** 147,165 **** public PyObject __mod__(PyObject right) { ! BigInteger y = ((PyLong)right).value; ! return new PyLong(modulo(value, y, divide(value, y))); } public PyObject __divmod__(PyObject right) { ! BigInteger y = ((PyLong)right).value; ! BigInteger xdivy = divide(value, y); return new PyTuple(new PyObject[] { new PyLong(xdivy), ! new PyLong(modulo(value, y, xdivy)) }); } public PyObject __pow__(PyObject right, PyObject modulo) { ! BigInteger y = ((PyLong)right).value; if (y.compareTo(BigInteger.valueOf(0)) < 0) { if (value.compareTo(BigInteger.valueOf(0)) != 0) --- 194,250 ---- public PyObject __mod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! BigInteger rightv = coerce(right); ! return new PyLong(modulo(value, rightv, divide(value, rightv))); } + public PyObject __rmod__(PyObject left) { + if (!canCoerce(left)) + return null; + BigInteger leftv = coerce(left); + return new PyLong(modulo(leftv, value, divide(leftv, value))); + } + public PyObject __divmod__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! BigInteger rightv = coerce(right); ! ! BigInteger xdivy = divide(value, rightv); return new PyTuple(new PyObject[] { new PyLong(xdivy), ! new PyLong(modulo(value, rightv, xdivy)) }); } + public PyObject __rdivmod__(PyObject left) { + if (!canCoerce(left)) + return null; + BigInteger leftv = coerce(left); + + BigInteger xdivy = divide(leftv, value); + return new PyTuple(new PyObject[] { + new PyLong(xdivy), + new PyLong(modulo(leftv, value, xdivy)) + }); + } + public PyObject __pow__(PyObject right, PyObject modulo) { ! if (!canCoerce(right)) ! return null; ! ! if (modulo != null && !canCoerce(right)) ! return null; ! return _pow(value, coerce(right), modulo); ! } ! ! public PyObject __rpow__(PyObject left) { ! if (!canCoerce(left)) ! return null; ! return _pow(coerce(left), value, null); ! } ! ! public static PyLong _pow(BigInteger value, BigInteger y, PyObject modulo) { if (y.compareTo(BigInteger.valueOf(0)) < 0) { if (value.compareTo(BigInteger.valueOf(0)) != 0) *************** *** 174,178 **** // are fixed by SUN ! BigInteger z = ((PyLong)modulo).value; int zi = z.intValue(); // Clear up some special cases right away --- 259,263 ---- // are fixed by SUN ! BigInteger z = coerce(modulo); int zi = z.intValue(); // Clear up some special cases right away *************** *** 203,224 **** } public PyObject __lshift__(PyObject right) { ! return new PyLong(value.shiftLeft(((PyLong)right).value.intValue())); } public PyObject __rshift__(PyObject right) { ! return new PyLong(value.shiftRight(((PyLong)right).value.intValue())); } public PyObject __and__(PyObject right) { ! return new PyLong(value.and(((PyLong)right).value)); } public PyObject __xor__(PyObject right) { ! return new PyLong(value.xor(((PyLong)right).value)); } public PyObject __or__(PyObject right) { ! return new PyLong(value.or(((PyLong)right).value)); } --- 288,328 ---- } + private static final int coerceInt(PyObject other) { + if (other instanceof PyLong) + return (int) ((PyLong) other).getLong(Integer.MIN_VALUE, Integer.MAX_VALUE); + else if (other instanceof PyInteger) + return ((PyInteger) other).getValue(); + else + throw Py.TypeError("xxx"); + } + public PyObject __lshift__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.shiftLeft(coerceInt(right))); } public PyObject __rshift__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.shiftRight(coerceInt(right))); } public PyObject __and__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.and(coerce(right))); } public PyObject __xor__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.xor(coerce(right))); } public PyObject __or__(PyObject right) { ! if (!canCoerce(right)) ! return null; ! return new PyLong(value.or(coerce(right))); } *************** *** 275,278 **** --- 379,392 ---- public PyString __str__() { return Py.newString(value.toString()); + } + + public boolean isMappingType() { return false; } + public boolean isSequenceType() { return false; } + + // __class__ boilerplate -- see PyObject for details + public static PyClass __class__; + + protected PyClass getPyClass() { + return __class__; } } Index: PyInstance.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyInstance.java,v retrieving revision 2.13 retrieving revision 2.14 diff -C2 -r2.13 -r2.14 *** PyInstance.java 2000/10/08 18:20:09 2.13 --- PyInstance.java 2001/01/31 13:34:35 2.14 *************** *** 679,683 **** **/ public PyObject __add__(PyObject o) { ! return invoke_ex("__add__", o); } --- 679,693 ---- **/ public PyObject __add__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__add__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__add__", o2); ! else ! return o1._add(o2); ! } } *************** *** 687,691 **** **/ public PyObject __radd__(PyObject o) { ! return invoke_ex("__radd__", o); } --- 697,711 ---- **/ public PyObject __radd__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__radd__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__radd__", o2); ! else ! return o2._add(o1); ! } } *************** *** 706,710 **** **/ public PyObject __sub__(PyObject o) { ! return invoke_ex("__sub__", o); } --- 726,740 ---- **/ public PyObject __sub__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__sub__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__sub__", o2); ! else ! return o1._sub(o2); ! } } *************** *** 714,718 **** **/ public PyObject __rsub__(PyObject o) { ! return invoke_ex("__rsub__", o); } --- 744,758 ---- **/ public PyObject __rsub__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rsub__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rsub__", o2); ! else ! return o2._sub(o1); ! } } *************** *** 733,737 **** **/ public PyObject __mul__(PyObject o) { ! return invoke_ex("__mul__", o); } --- 773,787 ---- **/ public PyObject __mul__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__mul__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__mul__", o2); ! else ! return o1._mul(o2); ! } } *************** *** 741,745 **** **/ public PyObject __rmul__(PyObject o) { ! return invoke_ex("__rmul__", o); } --- 791,805 ---- **/ public PyObject __rmul__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rmul__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rmul__", o2); ! else ! return o2._mul(o1); ! } } *************** *** 760,764 **** **/ public PyObject __div__(PyObject o) { ! return invoke_ex("__div__", o); } --- 820,834 ---- **/ public PyObject __div__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__div__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__div__", o2); ! else ! return o1._div(o2); ! } } *************** *** 768,772 **** **/ public PyObject __rdiv__(PyObject o) { ! return invoke_ex("__rdiv__", o); } --- 838,852 ---- **/ public PyObject __rdiv__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rdiv__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rdiv__", o2); ! else ! return o2._div(o1); ! } } *************** *** 787,791 **** **/ public PyObject __mod__(PyObject o) { ! return invoke_ex("__mod__", o); } --- 867,881 ---- **/ public PyObject __mod__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__mod__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__mod__", o2); ! else ! return o1._mod(o2); ! } } *************** *** 795,799 **** **/ public PyObject __rmod__(PyObject o) { ! return invoke_ex("__rmod__", o); } --- 885,899 ---- **/ public PyObject __rmod__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rmod__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rmod__", o2); ! else ! return o2._mod(o1); ! } } *************** *** 814,818 **** **/ public PyObject __divmod__(PyObject o) { ! return invoke_ex("__divmod__", o); } --- 914,928 ---- **/ public PyObject __divmod__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__divmod__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__divmod__", o2); ! else ! return o1._divmod(o2); ! } } *************** *** 822,826 **** **/ public PyObject __rdivmod__(PyObject o) { ! return invoke_ex("__rdivmod__", o); } --- 932,946 ---- **/ public PyObject __rdivmod__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rdivmod__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rdivmod__", o2); ! else ! return o2._divmod(o1); ! } } *************** *** 830,834 **** **/ public PyObject __pow__(PyObject o) { ! return invoke_ex("__pow__", o); } --- 950,964 ---- **/ public PyObject __pow__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__pow__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__pow__", o2); ! else ! return o1._pow(o2); ! } } *************** *** 838,842 **** **/ public PyObject __rpow__(PyObject o) { ! return invoke_ex("__rpow__", o); } --- 968,982 ---- **/ public PyObject __rpow__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rpow__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rpow__", o2); ! else ! return o2._pow(o1); ! } } *************** *** 857,861 **** **/ public PyObject __lshift__(PyObject o) { ! return invoke_ex("__lshift__", o); } --- 997,1011 ---- **/ public PyObject __lshift__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__lshift__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__lshift__", o2); ! else ! return o1._lshift(o2); ! } } *************** *** 865,869 **** **/ public PyObject __rlshift__(PyObject o) { ! return invoke_ex("__rlshift__", o); } --- 1015,1029 ---- **/ public PyObject __rlshift__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rlshift__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rlshift__", o2); ! else ! return o2._lshift(o1); ! } } *************** *** 884,888 **** **/ public PyObject __rshift__(PyObject o) { ! return invoke_ex("__rshift__", o); } --- 1044,1058 ---- **/ public PyObject __rshift__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rshift__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rshift__", o2); ! else ! return o1._rshift(o2); ! } } *************** *** 892,896 **** **/ public PyObject __rrshift__(PyObject o) { ! return invoke_ex("__rrshift__", o); } --- 1062,1076 ---- **/ public PyObject __rrshift__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rrshift__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rrshift__", o2); ! else ! return o2._rshift(o1); ! } } *************** *** 911,915 **** **/ public PyObject __and__(PyObject o) { ! return invoke_ex("__and__", o); } --- 1091,1105 ---- **/ public PyObject __and__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__and__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__and__", o2); ! else ! return o1._and(o2); ! } } *************** *** 919,923 **** **/ public PyObject __rand__(PyObject o) { ! return invoke_ex("__rand__", o); } --- 1109,1123 ---- **/ public PyObject __rand__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rand__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rand__", o2); ! else ! return o2._and(o1); ! } } *************** *** 938,942 **** **/ public PyObject __or__(PyObject o) { ! return invoke_ex("__or__", o); } --- 1138,1152 ---- **/ public PyObject __or__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__or__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__or__", o2); ! else ! return o1._or(o2); ! } } *************** *** 946,950 **** **/ public PyObject __ror__(PyObject o) { ! return invoke_ex("__ror__", o); } --- 1156,1170 ---- **/ public PyObject __ror__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__ror__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__ror__", o2); ! else ! return o2._or(o1); ! } } *************** *** 965,969 **** **/ public PyObject __xor__(PyObject o) { ! return invoke_ex("__xor__", o); } --- 1185,1199 ---- **/ public PyObject __xor__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__xor__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__xor__", o2); ! else ! return o1._xor(o2); ! } } *************** *** 973,977 **** **/ public PyObject __rxor__(PyObject o) { ! return invoke_ex("__rxor__", o); } --- 1203,1217 ---- **/ public PyObject __rxor__(PyObject o) { ! Object ctmp = __coerce_ex__(o); ! if (ctmp == null || ctmp == Py.None) ! return invoke_ex("__rxor__", o); ! else { ! PyObject o1 = ((PyObject[])ctmp)[0]; ! PyObject o2 = ((PyObject[])ctmp)[1]; ! if (this == o1) // Prevent recusion if __coerce__ return self ! return invoke_ex("__rxor__", o2); ! else ! return o2._xor(o1); ! } } *************** *** 986,988 **** --- 1226,1229 ---- return super.__ixor__(o); } + } Index: PyNone.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyNone.java,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** PyNone.java 1999/10/04 20:44:28 2.3 --- PyNone.java 2001/01/31 13:34:35 2.4 *************** *** 24,26 **** --- 24,36 ---- return "'None' object"; } + + public boolean isMappingType() { return false; } + public boolean isSequenceType() { return false; } + + // __class__ boilerplate -- see PyObject for details + public static PyClass __class__; + + protected PyClass getPyClass() { + return __class__; + } } Index: PyObject.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyObject.java,v retrieving revision 2.16 retrieving revision 2.17 diff -C2 -r2.16 -r2.17 *** PyObject.java 2001/01/21 16:19:52 2.16 --- PyObject.java 2001/01/31 13:34:35 2.17 *************** *** 824,827 **** --- 824,828 ---- } + /** Implements cmp(this, other) *************** *** 1087,1090 **** --- 1088,1093 ---- public PyObject __pow__(PyObject o2, PyObject o3) throws PyException { return null; } + + // Generated by make_binops.py (Begin) *************** *** 1123,1165 **** * with these operands. **/ ! public final PyObject _add(PyObject o2_in) { ! PyObject o2 = o2_in; ! PyObject o1 = this; ! Object ctmp; ! if (o1.__class__ != o2.__class__) { ! ctmp = o1.__coerce_ex__(o2); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o1 = ((PyObject[])ctmp)[0]; ! o2 = ((PyObject[])ctmp)[1]; ! } else { ! o2 = (PyObject)ctmp; ! } ! } ! } else ctmp = null; ! ! if (ctmp != Py.None && (o1 = o1.__add__(o2)) != null) ! return o1; ! o1 = this; ! o2 = o2_in; ! if (o1.__class__ != o2.__class__) { ! ctmp=o2.__coerce_ex__(o1); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o2 = ((PyObject[])ctmp)[0]; ! o1 = ((PyObject[])ctmp)[1]; ! } else { ! o1 = (PyObject)ctmp; ! } ! } ! } ! if (ctmp != Py.None) { ! if (o1.__class__ == o2.__class__) ! o1 = o1.__add__(o2); ! else ! o1 = o2.__radd__(o1); ! if (o1 != null) ! return o1; ! } throw Py.TypeError( "__add__ nor __radd__ defined for these operands"); --- 1126,1136 ---- * with these operands. **/ ! public final PyObject _add(PyObject o2) { ! PyObject x = __add__(o2); ! if (x != null) ! return x; ! x = o2.__radd__(this); ! if (x != null) ! return x; throw Py.TypeError( "__add__ nor __radd__ defined for these operands"); *************** *** 1200,1242 **** * with these operands. **/ ! public final PyObject _sub(PyObject o2_in) { ! PyObject o2 = o2_in; ! PyObject o1 = this; ! Object ctmp; ! if (o1.__class__ != o2.__class__) { ! ctmp = o1.__coerce_ex__(o2); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o1 = ((PyObject[])ctmp)[0]; ! o2 = ((PyObject[])ctmp)[1]; ! } else { ! o2 = (PyObject)ctmp; ! } ! } ! } else ctmp = null; ! ! if (ctmp != Py.None && (o1 = o1.__sub__(o2)) != null) ! return o1; ! o1 = this; ! o2 = o2_in; ! if (o1.__class__ != o2.__class__) { ! ctmp=o2.__coerce_ex__(o1); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o2 = ((PyObject[])ctmp)[0]; ! o1 = ((PyObject[])ctmp)[1]; ! } else { ! o1 = (PyObject)ctmp; ! } ! } ! } ! if (ctmp != Py.None) { ! if (o1.__class__ == o2.__class__) ! o1 = o1.__sub__(o2); ! else ! o1 = o2.__rsub__(o1); ! if (o1 != null) ! return o1; ! } throw Py.TypeError( "__sub__ nor __rsub__ defined for these operands"); --- 1171,1181 ---- * with these operands. **/ ! public final PyObject _sub(PyObject o2) { ! PyObject x = __sub__(o2); ! if (x != null) ! return x; ! x = o2.__rsub__(this); ! if (x != null) ! return x; throw Py.TypeError( "__sub__ nor __rsub__ defined for these operands"); *************** *** 1277,1319 **** * with these operands. **/ ! public final PyObject _mul(PyObject o2_in) { ! PyObject o2 = o2_in; ! PyObject o1 = this; ! Object ctmp; ! if (o1.__class__ != o2.__class__) { ! ctmp = o1.__coerce_ex__(o2); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o1 = ((PyObject[])ctmp)[0]; ! o2 = ((PyObject[])ctmp)[1]; ! } else { ! o2 = (PyObject)ctmp; ! } ! } ! } else ctmp = null; ! ! if (ctmp != Py.None && (o1 = o1.__mul__(o2)) != null) ! return o1; ! o1 = this; ! o2 = o2_in; ! if (o1.__class__ != o2.__class__) { ! ctmp=o2.__coerce_ex__(o1); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o2 = ((PyObject[])ctmp)[0]; ! o1 = ((PyObject[])ctmp)[1]; ! } else { ! o1 = (PyObject)ctmp; ! } ! } ! } ! if (ctmp != Py.None) { ! if (o1.__class__ == o2.__class__) ! o1 = o1.__mul__(o2); ! else ! o1 = o2.__rmul__(o1); ! if (o1 != null) ! return o1; ! } throw Py.TypeError( "__mul__ nor __rmul__ defined for these operands"); --- 1216,1226 ---- * with these operands. **/ ! public final PyObject _mul(PyObject o2) { ! PyObject x = __mul__(o2); ! if (x != null) ! return x; ! x = o2.__rmul__(this); ! if (x != null) ! return x; throw Py.TypeError( "__mul__ nor __rmul__ defined for these operands"); *************** *** 1354,1396 **** * with these operands. **/ ! public final PyObject _div(PyObject o2_in) { ! PyObject o2 = o2_in; ! PyObject o1 = this; ! Object ctmp; ! if (o1.__class__ != o2.__class__) { ! ctmp = o1.__coerce_ex__(o2); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o1 = ((PyObject[])ctmp)[0]; ! o2 = ((PyObject[])ctmp)[1]; ! } else { ! o2 = (PyObject)ctmp; ! } ! } ! } else ctmp = null; ! ! if (ctmp != Py.None && (o1 = o1.__div__(o2)) != null) ! return o1; ! o1 = this; ! o2 = o2_in; ! if (o1.__class__ != o2.__class__) { ! ctmp=o2.__coerce_ex__(o1); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o2 = ((PyObject[])ctmp)[0]; ! o1 = ((PyObject[])ctmp)[1]; ! } else { ! o1 = (PyObject)ctmp; ! } ! } ! } ! if (ctmp != Py.None) { ! if (o1.__class__ == o2.__class__) ! o1 = o1.__div__(o2); ! else ! o1 = o2.__rdiv__(o1); ! if (o1 != null) ! return o1; ! } throw Py.TypeError( "__div__ nor __rdiv__ defined for these operands"); --- 1261,1271 ---- * with these operands. **/ ! public final PyObject _div(PyObject o2) { ! PyObject x = __div__(o2); ! if (x != null) ! return x; ! x = o2.__rdiv__(this); ! if (x != null) ! return x; throw Py.TypeError( "__div__ nor __rdiv__ defined for these operands"); *************** *** 1431,1473 **** * with these operands. **/ ! public final PyObject _mod(PyObject o2_in) { ! PyObject o2 = o2_in; ! PyObject o1 = this; ! Object ctmp; ! if (o1.__class__ != o2.__class__) { ! ctmp = o1.__coerce_ex__(o2); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o1 = ((PyObject[])ctmp)[0]; ! o2 = ((PyObject[])ctmp)[1]; ! } else { ! o2 = (PyObject)ctmp; ! } ! } ! } else ctmp = null; ! ! if (ctmp != Py.None && (o1 = o1.__mod__(o2)) != null) ! return o1; ! o1 = this; ! o2 = o2_in; ! if (o1.__class__ != o2.__class__) { ! ctmp=o2.__coerce_ex__(o1); ! if (ctmp != null) { ! if (ctmp instanceof PyObject[]) { ! o2 = ((PyObject[])ctmp)[0]; ! o1 = ((PyObject[])ctmp)[1]; ! } else { ! o1 = (PyObject)ctmp; ! } ! } ! } ! if (ctmp != Py.None) { ! if (o1.__class__ == o2.__class__) ! o1 = o1.__mod__(o2); ! else ! o1 = o2.__rmod__(o1); ! if (o1 != null) ! return o1; ! } throw Py.TypeError( "__mod__ nor __rmod__ defined for these operands"); --- 1306,1316 ---- * with these operands. **/ ! public final PyObject _mod(PyObject o2) { ! PyObject x = __mod__(o2); ! if (x != null) ! return x; ! x = o2.__rmod__(this); ! if (x != null) ! return x; throw Py.TypeError( "__mod__ nor __rmod__ defined for... [truncated message content] |