Commit 3ac5fb86 authored by Stefan Behnel's avatar Stefan Behnel

fix ticket #644: infer type of C-API optimised methods of builtin types as...

fix ticket #644: infer type of C-API optimised methods of builtin types as Python object instead of C function
parent fccdc509
......@@ -3356,7 +3356,14 @@ class AttributeNode(ExprNode):
elif self.analyse_as_unbound_cmethod(env):
return self.entry.type
else:
self.analyse_attribute(env, obj_type = self.obj.infer_type(env))
obj_type = self.obj.infer_type(env)
self.analyse_attribute(env, obj_type = obj_type)
if obj_type.is_builtin_type and self.type.is_cfunction:
# special case: C-API replacements for C methods of
# builtin types cannot be inferred as C functions as
# that would prevent their use as bound methods
self.type = py_object_type
return py_object_type
return self.type
def analyse_target_declaration(self, env):
......
......@@ -199,6 +199,15 @@ def builtin_type_operations():
T2 = () * 2
assert typeof(T2) == "tuple object", typeof(T2)
def builtin_type_methods():
"""
>>> builtin_type_methods()
"""
l = []
assert typeof(l) == 'list object', typeof(l)
append = l.append
assert typeof(append) == 'Python object', typeof(append)
cdef int func(int x):
return x+1
......
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