From: Finn B. <bc...@us...> - 2001-12-16 13:04:05
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv7458 Modified Files: Py.java PyInstance.java PySystemState.java __builtin__.java Log Message: Support for the NotImplemented builtin and its use with rich comparison. Fix for "[ #490230 ] NotImplemented not implemented". Index: Py.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/Py.java,v retrieving revision 2.60 retrieving revision 2.61 diff -C2 -d -r2.60 -r2.61 *** Py.java 2001/12/06 19:30:32 2.60 --- Py.java 2001/12/16 13:04:02 2.61 *************** *** 22,25 **** --- 22,28 ---- public static PyObject Ellipsis; + /** The singleton NotImplemented Python object. Used in rich comparison */ + public static PyObject NotImplemented; + /** A zero-length array of Strings to pass to functions that don't have any keyword arguments **/ Index: PyInstance.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyInstance.java,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -d -r2.27 -r2.28 *** PyInstance.java 2001/11/06 16:48:37 2.27 --- PyInstance.java 2001/12/16 13:04:02 2.28 *************** *** 425,450 **** } public PyObject __lt__(PyObject o) { ! return invoke_ex("__lt__", o); } public PyObject __le__(PyObject o) { ! return invoke_ex("__le__", o); } public PyObject __gt__(PyObject o) { ! return invoke_ex("__gt__", o); } public PyObject __ge__(PyObject o) { ! return invoke_ex("__ge__", o); } public PyObject __eq__(PyObject o) { ! return invoke_ex("__eq__", o); } public PyObject __ne__(PyObject o) { ! return invoke_ex("__ne__", o); } --- 425,457 ---- } + private PyObject invoke_ex_richcmp(String name, PyObject o) { + PyObject ret = invoke_ex(name, o); + if (ret == Py.NotImplemented) + return null; + return ret; + } + public PyObject __lt__(PyObject o) { ! return invoke_ex_richcmp("__lt__", o); } public PyObject __le__(PyObject o) { ! return invoke_ex_richcmp("__le__", o); } public PyObject __gt__(PyObject o) { ! return invoke_ex_richcmp("__gt__", o); } public PyObject __ge__(PyObject o) { ! return invoke_ex_richcmp("__ge__", o); } public PyObject __eq__(PyObject o) { ! return invoke_ex_richcmp("__eq__", o); } public PyObject __ne__(PyObject o) { ! return invoke_ex_richcmp("__ne__", o); } Index: PySystemState.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PySystemState.java,v retrieving revision 2.70 retrieving revision 2.71 diff -C2 -d -r2.70 -r2.71 *** PySystemState.java 2001/12/06 14:31:12 2.70 --- PySystemState.java 2001/12/16 13:04:02 2.71 *************** *** 394,397 **** --- 394,398 ---- private static void initStaticFields() { Py.None = new PyNone(); + Py.NotImplemented = new PyNotImplemented(); Py.NoKeywords = new String[0]; Py.EmptyObjects = new PyObject[0]; Index: __builtin__.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/__builtin__.java,v retrieving revision 2.39 retrieving revision 2.40 diff -C2 -d -r2.39 -r2.40 *** __builtin__.java 2001/11/27 19:07:21 2.39 --- __builtin__.java 2001/12/16 13:04:02 2.40 *************** *** 111,114 **** --- 111,115 ---- public static void classDictInit(PyObject dict) { dict.__setitem__("None", Py.None); + dict.__setitem__("NotImplemented", Py.NotImplemented); dict.__setitem__("Ellipsis", Py.Ellipsis); |