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):
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