From: <pj...@us...> - 2008-07-23 20:36:44
|
Revision: 4991 http://jython.svn.sourceforge.net/jython/?rev=4991&view=rev Author: pjenvey Date: 2008-07-23 20:36:42 +0000 (Wed, 23 Jul 2008) Log Message: ----------- o fix passing chars > 256 to Py.makeCharacter o make struct.error a class and raise struct.errors instead of OverflowErrors Modified Paths: -------------- branches/asm/src/org/python/core/Py.java branches/asm/src/org/python/modules/struct.java Modified: branches/asm/src/org/python/core/Py.java =================================================================== --- branches/asm/src/org/python/core/Py.java 2008-07-23 19:13:04 UTC (rev 4990) +++ branches/asm/src/org/python/core/Py.java 2008-07-23 20:36:42 UTC (rev 4991) @@ -1444,6 +1444,11 @@ static final PyString makeCharacter(int codepoint, boolean toUnicode) { if (toUnicode) { return new PyUnicode(codepoint); + } else if (codepoint > 65536) { + throw new IllegalArgumentException(String.format("Codepoint > 65536 (%d) requires " + + "toUnicode argument", codepoint)); + } else if (codepoint > 256) { + return new PyString((char)codepoint); } if (letters == null) { Modified: branches/asm/src/org/python/modules/struct.java =================================================================== --- branches/asm/src/org/python/modules/struct.java 2008-07-23 19:13:04 UTC (rev 4990) +++ branches/asm/src/org/python/modules/struct.java 2008-07-23 20:36:42 UTC (rev 4991) @@ -16,6 +16,7 @@ import org.python.core.PyLong; import org.python.core.PyObject; import org.python.core.PyString; +import org.python.core.PyStringMap; import org.python.core.PyTuple; import java.math.BigInteger; @@ -257,7 +258,7 @@ * Exception raised on various occasions; argument is a * string describing what is wrong. */ - public static PyString error = new PyString("struct.error"); + public static final PyObject error = Py.makeClass("error", Py.Exception, exceptionNamespace()); public static String __doc__ = "Functions to convert between Python values and C structs.\n" + @@ -330,8 +331,9 @@ long get_long(PyObject value) { if (value instanceof PyLong){ Object v = value.__tojava__(Long.TYPE); - if (v == Py.NoConversion) - throw Py.OverflowError("long int too long to convert"); + if (v == Py.NoConversion) { + throw StructError("long int too long to convert"); + } return ((Long) v).longValue(); } else return get_int(value); @@ -341,7 +343,7 @@ if (value instanceof PyLong){ BigInteger v = (BigInteger)value.__tojava__(BigInteger.class); if (v.compareTo(PyLong.maxULong) > 0){ - throw Py.OverflowError("unsigned long int too long to convert"); + throw StructError("unsigned long int too long to convert"); } return v; } else @@ -1041,4 +1043,10 @@ private static PyException StructError(String explanation) { return new PyException(error, explanation); } + + private static PyObject exceptionNamespace() { + PyObject dict = new PyStringMap(); + dict.__setitem__("__module__", new PyString("struct")); + return dict; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |