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);
|