self.true_val = self.true_val.analyse_types(env)
self.false_val = self.false_val.analyse_types(env)
self.type = PyrexTypes.independent_spanning_type(self.true_val.type, self.false_val.type)
+ if self.type.is_pyobject:
+ self.result_ctype = py_object_type
if self.true_val.type.is_pyobject or self.false_val.type.is_pyobject:
self.true_val = self.true_val.coerce_to(self.type, env)
self.false_val = self.false_val.coerce_to(self.type, env)
# mode: run
-# tag: if_else_expr
+# tag: condexpr
+
+cimport cython
cdef class Foo:
+ cdef dict data
+
def __repr__(self):
return '<Foo>'
<Foo>
"""
return [obj] if cond else obj
+
+
+cdef func(Foo foo, dict data):
+ return foo, data
+
+
+@cython.test_fail_if_path_exists('//PyTypeTestNode')
+def test_cpp_pyobject_cast(Foo obj1, Foo obj2, cond):
+ """
+ >>> test_cpp_pyobject_cast(Foo(), Foo(), True)
+ (<Foo>, None)
+ """
+ return func(obj1 if cond else obj2, obj1.data if cond else obj2.data)