Commit d4daf977 authored by Robert Bradshaw's avatar Robert Bradshaw

Perform typecheck for (typechecking) builtin casts.

parent 02be7fbc
......@@ -8034,6 +8034,7 @@ class TypecastNode(ExprNode):
# operand ExprNode
# base_type CBaseTypeNode
# declarator CDeclaratorNode
# typecheck boolean
#
# If used from a transform, one can if wanted specify the attribute
# "type" directly and leave base_type and declarator to None
......@@ -8094,7 +8095,7 @@ class TypecastNode(ExprNode):
else:
warning(self.pos, "No conversion from %s to %s, python object pointer used." % (self.type, self.operand.type))
elif from_py and to_py:
if self.typecheck and self.type.is_extension_type:
if self.typecheck and self.type.is_pyobject:
self.operand = PyTypeTestNode(self.operand, self.type, env, notnone=True)
elif isinstance(self.operand, SliceIndexNode):
# This cast can influence the created type of string slices.
......
......@@ -101,3 +101,14 @@ def test_getFooCast():
cdef int old_count = count
cdef Foo x = <Foo?>getFoo()
return count - old_count
def test_builtin_typecheck_cast(maybe_list):
"""
>>> test_builtin_typecheck_cast([])
[]
>>> test_builtin_typecheck_cast({})
Traceback (most recent call last):
...
TypeError: Expected list, got dict
"""
return <list?>maybe_list
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