fix ticket #227: type check for bool is called PyBool_Check, not CheckExact
authorStefan Behnel <scoder@users.berlios.de>
Sun, 1 Mar 2009 19:59:01 +0000 (20:59 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Sun, 1 Mar 2009 19:59:01 +0000 (20:59 +0100)
Cython/Compiler/PyrexTypes.py

index aeea3c506ca27ef4bea996acd3d09217f8e4bed0..74745a14a855431d8c96efae57e755d58f3e61da 100644 (file)
@@ -303,14 +303,16 @@ class BuiltinObjectType(PyObjectType):
     def type_test_code(self, arg):
         type_name = self.name
         if type_name == 'str':
-            type_name = 'String'
+            check = 'PyString_CheckExact'
         elif type_name == 'set':
-            type_name = 'AnySet'
+            check = 'PyAnySet_CheckExact'
         elif type_name == 'frozenset':
-            type_name = 'FrozenSet'
+            check = 'PyFrozenSet_CheckExact'
+        elif type_name == 'bool':
+            check = 'PyBool_Check'
         else:
-            type_name = type_name.capitalize()
-        return 'likely(Py%s_CheckExact(%s)) || (%s) == Py_None || (PyErr_Format(PyExc_TypeError, "Expected %s, got %%s", Py_TYPE(%s)->tp_name), 0)' % (type_name, arg, arg, self.name, arg)
+            check = 'Py%s_CheckExact' % type_name.capitalize()
+        return 'likely(%s(%s)) || (%s) == Py_None || (PyErr_Format(PyExc_TypeError, "Expected %s, got %%s", Py_TYPE(%s)->tp_name), 0)' % (check, arg, arg, self.name, arg)
 
     def declaration_code(self, entity_code, 
             for_display = 0, dll_linkage = None, pyrex = 0):