From: <fwi...@us...> - 2006-05-19 19:01:15
|
Revision: 2737 Author: fwierzbicki Date: 2006-05-19 12:01:10 -0700 (Fri, 19 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2737&view=rev Log Message: ----------- cleanup of new-style class support. Modified Paths: -------------- trunk/jython/src/org/python/core/PyLong.java Modified: trunk/jython/src/org/python/core/PyLong.java =================================================================== --- trunk/jython/src/org/python/core/PyLong.java 2006-05-19 19:00:25 UTC (rev 2736) +++ trunk/jython/src/org/python/core/PyLong.java 2006-05-19 19:01:10 UTC (rev 2737) @@ -18,6 +18,7 @@ public static final BigInteger maxULong = BigInteger.valueOf(1).shiftLeft(64).subtract(BigInteger.valueOf(1)); + //~ BEGIN GENERATED REGION -- DO NOT EDIT SEE gexpose.py /* type info */ public static final String exposed_name="long"; @@ -1130,6 +1131,7 @@ } }); } + //~ END GENERATED REGION -- DO NOT EDIT SEE gexpose.py private BigInteger value; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2008-04-06 19:33:13
|
Revision: 4309 http://jython.svn.sourceforge.net/jython/?rev=4309&view=rev Author: pjenvey Date: 2008-04-06 12:33:09 -0700 (Sun, 06 Apr 2008) Log Message: ----------- make long() (no args) return a long instead of int Modified Paths: -------------- trunk/jython/src/org/python/core/PyLong.java Modified: trunk/jython/src/org/python/core/PyLong.java =================================================================== --- trunk/jython/src/org/python/core/PyLong.java 2008-04-06 17:07:20 UTC (rev 4308) +++ trunk/jython/src/org/python/core/PyLong.java 2008-04-06 19:33:09 UTC (rev 4309) @@ -35,7 +35,7 @@ int base = ap.getInt(1, -909); if (new_.for_type == subtype) { if (x == null) { - return Py.Zero; + return new PyLong(0); } Object o = x.__tojava__(BigInteger.class); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2008-06-20 07:37:58
|
Revision: 4696 http://jython.svn.sourceforge.net/jython/?rev=4696&view=rev Author: pjenvey Date: 2008-06-20 00:37:56 -0700 (Fri, 20 Jun 2008) Log Message: ----------- o refactor long __new__ to work like CPython's. eases the migration to allowing __long__ to return PyIntegers o don't support __tojava__ conversion here, PyObjects should just implement __long__ anyway Modified Paths: -------------- trunk/jython/src/org/python/core/PyLong.java Modified: trunk/jython/src/org/python/core/PyLong.java =================================================================== --- trunk/jython/src/org/python/core/PyLong.java 2008-06-20 06:21:29 UTC (rev 4695) +++ trunk/jython/src/org/python/core/PyLong.java 2008-06-20 07:37:56 UTC (rev 4696) @@ -27,50 +27,43 @@ private BigInteger value; @ExposedNew - public static PyObject long_new(PyNewWrapper new_, boolean init, PyType subtype, - PyObject[] args, String[] keywords) { + public static PyObject long___new__(PyNewWrapper new_, boolean init, PyType subtype, + PyObject[] args, String[] keywords) { + if (new_.for_type != subtype) { + return longSubtypeNew(new_, init, subtype, args, keywords); + } ArgParser ap = new ArgParser("long", args, keywords, new String[] {"x", "base"}, 0); - PyObject x = ap.getPyObject(0, null); int base = ap.getInt(1, -909); - if (new_.for_type == subtype) { - if (x == null) { - return new PyLong(0); - } - Object o = x.__tojava__(BigInteger.class); - if(o != Py.NoConversion) { - return Py.newLong((BigInteger)o); - } + if (x == null) { + return new PyLong(0); + } + if (base == -909) { + return x.__long__(); + } + if (!(x instanceof PyString)) { + throw Py.TypeError("long: can't convert non-string with explicit base"); + } + return ((PyString)x).atol(base); + } - if (base == -909) { - return x.__long__(); - } - - if (!(x instanceof PyString)) { - throw Py.TypeError("long: can't convert non-string with explicit base"); - } - - return ((PyString) x).atol(base); + /** + * Wimpy, slow approach to new calls for subtypes of long. + * + * First creates a regular long from whatever arguments we got, then allocates a + * subtype instance and initializes it from the regular long. The regular long is then + * thrown away. + */ + private static PyObject longSubtypeNew(PyNewWrapper new_, boolean init, PyType subtype, + PyObject[] args, String[] keywords) { + PyObject tmp = long___new__(new_, init, TYPE, args, keywords); + if (tmp instanceof PyInteger) { + int intValue = ((PyInteger)tmp).getValue(); + return new PyLongDerived(subtype, BigInteger.valueOf(intValue)); } else { - if (x == null) { - return new PyLongDerived(subtype, BigInteger.valueOf(0)); - } - Object o = x.__tojava__(BigInteger.class); - if(o != Py.NoConversion) { - return new PyLongDerived(subtype, (BigInteger)o); - } - - if (base == -909) { - return new PyLongDerived(subtype, x.__long__().getValue()); - } - - if (!(x instanceof PyString)) { - throw Py.TypeError("long: can't convert non-string with explicit base"); - } - - return new PyLongDerived(subtype, (((PyString) x).atol(base)).getValue()); + return new PyLongDerived(subtype, ((PyLong)tmp).value); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2008-06-22 21:15:18
|
Revision: 4713 http://jython.svn.sourceforge.net/jython/?rev=4713&view=rev Author: pjenvey Date: 2008-06-22 14:15:16 -0700 (Sun, 22 Jun 2008) Log Message: ----------- throw a TypeError when __long__ isn't supported fixes #1059 Modified Paths: -------------- trunk/jython/src/org/python/core/PyLong.java Modified: trunk/jython/src/org/python/core/PyLong.java =================================================================== --- trunk/jython/src/org/python/core/PyLong.java 2008-06-21 23:42:05 UTC (rev 4712) +++ trunk/jython/src/org/python/core/PyLong.java 2008-06-22 21:15:16 UTC (rev 4713) @@ -41,7 +41,15 @@ return new PyLong(0); } if (base == -909) { - return x.__long__(); + try { + return x.__long__(); + } catch (PyException pye) { + if (!Py.matchException(pye, Py.AttributeError)) { + throw pye; + } + throw Py.TypeError(String.format("long() argument must be a string or a number, " + + "not '%.200s'", x.getType().fastGetName())); + } } if (!(x instanceof PyString)) { throw Py.TypeError("long: can't convert non-string with explicit base"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |