Commit ac886ee9 authored by Xavier Thompson's avatar Xavier Thompson

Make cypclass isinstanceof work for const arguments

parent fe8b742b
...@@ -675,7 +675,7 @@ def inject_cypclass_typecheck_functions(): ...@@ -675,7 +675,7 @@ def inject_cypclass_typecheck_functions():
isinstanceof_type = PyrexTypes.CFuncType( isinstanceof_type = PyrexTypes.CFuncType(
PyrexTypes.c_int_type, PyrexTypes.c_int_type,
[ [
PyrexTypes.CFuncTypeArg("obj", PyrexTypes.cy_object_type, None), PyrexTypes.CFuncTypeArg("obj", PyrexTypes.const_cy_object_type, None),
PyrexTypes.CFuncTypeArg("type", template_placeholder_type, None) PyrexTypes.CFuncTypeArg("type", template_placeholder_type, None)
], ],
nogil = 1, nogil = 1,
......
...@@ -5040,6 +5040,7 @@ unspecified_type = UnspecifiedType() ...@@ -5040,6 +5040,7 @@ unspecified_type = UnspecifiedType()
py_object_type = PyObjectType() py_object_type = PyObjectType()
cy_object_type = CypClassType('cyobject', None, "CyObject", None) cy_object_type = CypClassType('cyobject', None, "CyObject", None)
const_cy_object_type = ConstCypclassType(cy_object_type)
c_void_type = CVoidType() c_void_type = CVoidType()
......
...@@ -456,7 +456,7 @@ ...@@ -456,7 +456,7 @@
template <typename T, typename O> template <typename T, typename O>
static inline int isinstanceof(O ob) { static inline int isinstanceof(O ob) {
static_assert(std::is_convertible<T, CyObject *>::value, "wrong type 'T' for isinstanceof[T]"); static_assert(std::is_convertible<T, CyObject *>::value, "wrong type 'T' for isinstanceof[T]");
return dynamic_cast<T>(ob) != NULL; return dynamic_cast<const typename std::remove_pointer<T>::type *>(ob) != NULL;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment