From: <zy...@us...> - 2008-07-30 15:46:36
|
Revision: 5022 http://jython.svn.sourceforge.net/jython/?rev=5022&view=rev Author: zyasoft Date: 2008-07-30 15:46:31 +0000 (Wed, 30 Jul 2008) Log Message: ----------- Support inf, -inf, nan literals (and any uppercasing). struct.pack("d") ducktypes like CPython and calls __float__. This fixes a number of issues for PyAMF. Modified Paths: -------------- branches/asm/src/org/python/core/PyFloat.java branches/asm/src/org/python/core/PyString.java branches/asm/src/org/python/modules/struct.java Modified: branches/asm/src/org/python/core/PyFloat.java =================================================================== --- branches/asm/src/org/python/core/PyFloat.java 2008-07-29 22:40:05 UTC (rev 5021) +++ branches/asm/src/org/python/core/PyFloat.java 2008-07-30 15:46:31 UTC (rev 5022) @@ -105,6 +105,10 @@ } private String formatDouble(int precision) { + if (Double.isNaN(value)) { + return "nan"; + } + String result = String.format("%%.%dg", precision); result = Py.newString(result).__mod__(this).toString(); Modified: branches/asm/src/org/python/core/PyString.java =================================================================== --- branches/asm/src/org/python/core/PyString.java 2008-07-29 22:40:05 UTC (rev 5021) +++ branches/asm/src/org/python/core/PyString.java 2008-07-30 15:46:31 UTC (rev 5022) @@ -1510,6 +1510,10 @@ try { // Double.valueOf allows format specifier ("d" or "f") at the end String lowSval = sval.toLowerCase(); + if (lowSval.equals("nan")) return Double.NaN; + else if (lowSval.equals("inf")) return Double.POSITIVE_INFINITY; + else if (lowSval.equals("-inf")) return Double.NEGATIVE_INFINITY; + if (lowSval.endsWith("d") || lowSval.endsWith("f")) { throw new NumberFormatException("format specifiers not allowed"); } Modified: branches/asm/src/org/python/modules/struct.java =================================================================== --- branches/asm/src/org/python/modules/struct.java 2008-07-29 22:40:05 UTC (rev 5021) +++ branches/asm/src/org/python/modules/struct.java 2008-07-30 15:46:31 UTC (rev 5022) @@ -351,8 +351,6 @@ } double get_float(PyObject value) { - if (!(value instanceof PyFloat)) - throw StructError("required argument is not an float"); return value.__float__().getValue(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |