("int", "PyInt_Type", []),
("long", "PyLong_Type", []),
("float", "PyFloat_Type", []),
- ("complex", "PyComplex_Type", []),
+
+# Until we have a way to access attributes of a type,
+# we don't want to make this one builtin.
+# ("complex", "PyComplex_Type", []),
("bytes", "PyBytes_Type", []),
("str", "PyString_Type", []),
for desc in builtin_function_table:
declare_builtin_func(*desc)
+builtin_types = {}
+
def init_builtin_types():
+ global builtin_types
for name, cname, funcs in builtin_types_table:
utility = builtin_utility_code.get(name)
the_type = builtin_scope.declare_builtin_type(name, cname, utility)
+ builtin_types[name] = the_type
for name, args, ret, cname in funcs:
sig = Signature(args, ret)
the_type.scope.declare_cfunction(name, sig.function_type(), None, cname)
self.entry.inline_func_in_pxd = self.inline_in_pxd
self.return_type = type.return_type
- if self.overridable and len(self.args) > 0:
+ if self.overridable and not env.is_module_scope:
+ if len(self.args) < 1 or not self.args[0].type.is_pyobject:
+ # An error will be produced in the cdef function
+ self.overridable = False
+
+ if self.overridable:
import ExprNodes
py_func_body = self.call_self_node(is_module_scope = env.is_module_scope)
self.py_func = DefNode(pos = self.pos,
return
else:
home_scope = env
+
+ if self.visibility == 'extern':
+ if self.module_name == '__builtin__' and self.class_name in Builtin.builtin_types:
+ warning(self.pos, "%s already a builtin Cython type" % self.class_name, 1)
+
self.entry = home_scope.declare_c_class(
name = self.class_name,
pos = self.pos,