diff -r 2976d81a9ac9 Cython/Compiler/Builtin.py --- a/Cython/Compiler/Builtin.py Thu Oct 02 12:33:14 2008 -0400 +++ b/Cython/Compiler/Builtin.py Thu Oct 02 13:37:52 2008 -0400 @@ -105,13 +105,22 @@ builtin_types_table = [ ("keys", "O", "O", "PyDict_Keys"), ("values","O", "O", "PyDict_Values")]), - ("set", "PySet_Type", []), + #("set", "PySet_Type", []), ("frozenset", "PyFrozenSet_Type", []), ("slice", "PySlice_Type", []), ("file", "PyFile_Type", []), ] + +import types +if hasattr(types, 'GetSetDescriptorType'): + builtin_types_table.append( + ("set", "PySet_Type", [("clear", "O", "i", "PySet_Clear"), + ("discard", "OO", "i", "PySet_Discard"), + ("add", "OO", "i", "PySet_Add"), + ("pop", "O", "O", "PySet_Pop")]) + ) builtin_structs_table = [ ('Py_buffer', 'Py_buffer', diff -r 2976d81a9ac9 Cython/Compiler/PyrexTypes.py --- a/Cython/Compiler/PyrexTypes.py Thu Oct 02 12:33:14 2008 -0400 +++ b/Cython/Compiler/PyrexTypes.py Thu Oct 02 13:37:52 2008 -0400 @@ -295,7 +295,10 @@ class BuiltinObjectType(PyObjectType): return type.is_pyobject and self.assignable_from(type) def type_test_code(self, arg): - return 'likely(Py%s_CheckExact(%s)) || (%s) == Py_None || (PyErr_Format(PyExc_TypeError, "Expected %s, got %%s", Py_TYPE(%s)->tp_name), 0)' % (self.name[0].upper() + self.name[1:], arg, arg, self.name, arg) + type = self.name.capitalize() + if type == 'Set': + type = 'AnySet' + return 'likely(Py%s_CheckExact(%s)) || (%s) == Py_None || (PyErr_Format(PyExc_TypeError, "Expected %s, got %%s", Py_TYPE(%s)->tp_name), 0)' % (type, arg, arg, self.name, arg) def declaration_code(self, entity_code, for_display = 0, dll_linkage = None, pyrex = 0):