[pywin32-checkins] pywin32/com/win32com/src MiscTypes.cpp, 1.11, 1.12 PyIBase.cpp, 1.9, 1.10
OLD project page for the Python extensions for Windows
                
                Brought to you by:
                
                    mhammond
                    
                
            
            
        
        
        
    | 
      
      
      From: Mark H. <mha...@us...> - 2009-02-04 04:01:31
      
     | 
| Update of /cvsroot/pywin32/pywin32/com/win32com/src In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv21528/com/win32com/src Modified Files: MiscTypes.cpp PyIBase.cpp Log Message: Remove __cmp__ and tp_compare slots from COM objects and return Py_NotImplemented in richcmp functions when faced with different types. Index: MiscTypes.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32com/src/MiscTypes.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** MiscTypes.cpp 19 Dec 2008 02:28:48 -0000 1.11 --- MiscTypes.cpp 4 Feb 2009 04:01:25 -0000 1.12 *************** *** 49,58 **** 0, /*tp_getattr*/ 0, /*tp_setattr*/ ! // For b/w compat, we still allow 'cmp()' to work with Py2k, but for Py3k only rich compare is supported. ! #if (PY_VERSION_HEX < 0x03000000) ! PyIBase::cmp, /*tp_compare*/ ! #else ! 0, ! #endif (reprfunc)PyIBase::repr, /*tp_repr*/ 0, /*tp_as_number*/ --- 49,53 ---- 0, /*tp_getattr*/ 0, /*tp_setattr*/ ! 0, /*tp_compare*/ (reprfunc)PyIBase::repr, /*tp_repr*/ 0, /*tp_as_number*/ Index: PyIBase.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/win32com/src/PyIBase.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PyIBase.cpp 19 Dec 2008 02:28:48 -0000 1.9 --- PyIBase.cpp 4 Feb 2009 04:01:25 -0000 1.10 *************** *** 79,84 **** int c = cmp(ob1, ob2); // BUT - it doesn't propogate exceptions correctly. ! if (c==-1 && PyErr_Occurred()) return NULL; assert(!PyErr_Occurred()); // should always have returned -1 on error. BOOL ret; --- 79,92 ---- int c = cmp(ob1, ob2); // BUT - it doesn't propogate exceptions correctly. ! if (c==-1 && PyErr_Occurred()) { ! // if the error related to the type of the object, ! // rich-compare wants Py_NotImplemented returned. ! if (PyErr_ExceptionMatches(PyExc_TypeError)) { ! PyErr_Clear(); ! Py_INCREF(Py_NotImplemented); ! return Py_NotImplemented; ! } return NULL; + } assert(!PyErr_Occurred()); // should always have returned -1 on error. BOOL ret; *************** *** 88,93 **** ret = c != 0; else { ! PyErr_SetString(PyExc_TypeError, "Interface pointers only compare equal or not equal"); ! return NULL; } return PyBool_FromLong(ret); --- 96,101 ---- ret = c != 0; else { ! Py_INCREF(Py_NotImplemented); ! return Py_NotImplemented; } return PyBool_FromLong(ret); |