Esempio n. 1
0
 public int __cmp__(PyObject other) {
   PyType self_type = getType();
   PyObject[] where_type = new PyObject[1];
   PyObject impl = self_type.lookup_where("__cmp__", where_type);
   // Full Compatibility with CPython __cmp__:
   // If the derived type don't override __cmp__, the
   // *internal* super().__cmp__ should be called, not the
   // exposed one. The difference is that the exposed __cmp__
   // throws a TypeError if the argument is an instance of the same type.
   if (impl == null || where_type[0] == TYPE || Py.isSubClass(TYPE, where_type[0])) {
     return super.__cmp__(other);
   }
   PyObject res = impl.__get__(this, self_type).__call__(other);
   if (res == Py.NotImplemented) {
     return -2;
   }
   int c = res.asInt();
   return c < 0 ? -1 : c > 0 ? 1 : 0;
 }