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): ...@@ -3356,7 +3356,14 @@ class AttributeNode(ExprNode):
elif self.analyse_as_unbound_cmethod(env): elif self.analyse_as_unbound_cmethod(env):
return self.entry.type return self.entry.type
else: 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 return self.type
def analyse_target_declaration(self, env): def analyse_target_declaration(self, env):
......
...@@ -199,6 +199,15 @@ def builtin_type_operations(): ...@@ -199,6 +199,15 @@ def builtin_type_operations():
T2 = () * 2 T2 = () * 2
assert typeof(T2) == "tuple object", typeof(T2) 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): cdef int func(int x):
return x+1 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