From: <pj...@us...> - 2011-03-20 19:41:37
|
Revision: 7251 http://jython.svn.sourceforge.net/jython/?rev=7251&view=rev Author: pjenvey Date: 2011-03-20 19:41:31 +0000 (Sun, 20 Mar 2011) Log Message: ----------- o add Py.writeUnraisable o remove the no longer needed formatException <oldclass>.__module__ workaround o cleanup class/instance __repr__ Modified Paths: -------------- trunk/jython/src/org/python/core/Py.java trunk/jython/src/org/python/core/PyClass.java trunk/jython/src/org/python/core/PyFinalizableInstance.java trunk/jython/src/org/python/core/PyInstance.java trunk/jython/src/org/python/modules/_weakref/AbstractReference.java Modified: trunk/jython/src/org/python/core/Py.java =================================================================== --- trunk/jython/src/org/python/core/Py.java 2011-03-20 06:07:17 UTC (rev 7250) +++ trunk/jython/src/org/python/core/Py.java 2011-03-20 19:41:31 UTC (rev 7251) @@ -1168,6 +1168,10 @@ } public static String formatException(PyObject type, PyObject value) { + return formatException(type, value, false); + } + + public static String formatException(PyObject type, PyObject value, boolean useRepr) { StringBuilder buf = new StringBuilder(); if (PyException.isExceptionClass(type)) { @@ -1178,10 +1182,7 @@ } PyObject moduleName = type.__findattr__("__module__"); if (moduleName == null) { - // XXX: Workaround the fact that PyClass lacks __module__ - if (!(type instanceof PyClass)) { - buf.append("<unknown>"); - } + buf.append("<unknown>"); } else { String moduleStr = moduleName.toString(); if (!moduleStr.equals("exceptions")) { @@ -1191,11 +1192,11 @@ } buf.append(className); } else { - buf.append(type.__str__()); + buf.append(useRepr ? type.__repr__() : type.__str__()); } if (value != null && value != Py.None) { // only print colon if the str() of the object is not the empty string - PyObject s = value.__str__(); + PyObject s = useRepr ? value.__repr__() : value.__str__(); if (!(s instanceof PyString) || s.__len__() != 0) { buf.append(": "); } @@ -1204,7 +1205,18 @@ return buf.toString(); } + public static void writeUnraisable(Exception exc, PyObject obj) { + if (exc instanceof PyException) { + PyException pye = (PyException) exc; + stderr.println(String.format("Exception %s in %s ignored", + formatException(pye.type, pye.value, true), obj)); + } else { + // XXX: this could be better handled + exc.printStackTrace(); + } + } + /* Equivalent to Python's assert statement */ public static void assert_(PyObject test, PyObject message) { if (!test.__nonzero__()) { Modified: trunk/jython/src/org/python/core/PyClass.java =================================================================== --- trunk/jython/src/org/python/core/PyClass.java 2011-03-20 06:07:17 UTC (rev 7250) +++ trunk/jython/src/org/python/core/PyClass.java 2011-03-20 19:41:31 UTC (rev 7251) @@ -229,13 +229,8 @@ @Override public String toString() { PyObject mod = __dict__.__finditem__("__module__"); - String smod; - if (mod == null || !(mod instanceof PyString)) { - smod = "<unknown>"; - } else { - smod = ((PyString) mod).toString(); - } - return "<class " + smod + "." + __name__ + " at " + Py.idstr(this) + ">"; + String modStr = (mod == null || !Py.isInstance(mod, PyString.TYPE)) ? "?" : mod.toString(); + return String.format("<class %s.%s at %s>", modStr, __name__, Py.idstr(this)); } public boolean isSubClass(PyClass superclass) { Modified: trunk/jython/src/org/python/core/PyFinalizableInstance.java =================================================================== --- trunk/jython/src/org/python/core/PyFinalizableInstance.java 2011-03-20 06:07:17 UTC (rev 7250) +++ trunk/jython/src/org/python/core/PyFinalizableInstance.java 2011-03-20 19:41:31 UTC (rev 7251) @@ -12,14 +12,14 @@ * This is a special class due to performance. Defining * finalize() on a class, makes the class a lot slower. */ +public class PyFinalizableInstance extends PyInstance { -public class PyFinalizableInstance extends PyInstance -{ public PyFinalizableInstance(PyClass iclass) { super(iclass); } // __del__ method is invoked upon object finalization. + @Override protected void finalize() { try { instclass.__del__.__call__(this); @@ -28,12 +28,10 @@ PyObject method = instclass.__del__; try { method = __findattr__("__del__"); - } catch (PyException e) { ; } - - Py.stderr.println("Exception " + - Py.formatException(exc.type, exc.value) + - " in " + method + - " ignored"); + } catch (PyException e) { + // nothing we can do + } + Py.writeUnraisable(exc, method); } } } Modified: trunk/jython/src/org/python/core/PyInstance.java =================================================================== --- trunk/jython/src/org/python/core/PyInstance.java 2011-03-20 06:07:17 UTC (rev 7250) +++ trunk/jython/src/org/python/core/PyInstance.java 2011-03-20 19:41:31 UTC (rev 7251) @@ -381,18 +381,9 @@ */ protected PyString makeDefaultRepr() { PyObject mod = instclass.__dict__.__finditem__("__module__"); - String smod; - if(mod == Py.None) { - smod = ""; - } else { - if(mod == null || !(mod instanceof PyString)) { - smod = "<unknown>."; - } else { - smod = ((PyString)mod).toString() + '.'; - } - } - return new PyString("<" + smod + instclass.__name__ + " instance at " + - Py.idstr(this) + ">"); + String modStr = (mod == null || !Py.isInstance(mod, PyString.TYPE)) ? "?" : mod.toString(); + return new PyString(String.format("<%s.%s instance at %s>", modStr, instclass.__name__, + Py.idstr(this))); } @Override Modified: trunk/jython/src/org/python/modules/_weakref/AbstractReference.java =================================================================== --- trunk/jython/src/org/python/modules/_weakref/AbstractReference.java 2011-03-20 06:07:17 UTC (rev 7250) +++ trunk/jython/src/org/python/modules/_weakref/AbstractReference.java 2011-03-20 19:41:31 UTC (rev 7251) @@ -27,9 +27,7 @@ try { callback.__call__(this); } catch (Exception exc) { - // XXX: Should trigger the equiv. of CPython's - // PyErr_WriteUnraisable - exc.printStackTrace(); + Py.writeUnraisable(exc, callback); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |