Commit bcf5b71e authored by Stefan Behnel's avatar Stefan Behnel

merge

parents ffa0747f e1881e05
...@@ -91,7 +91,10 @@ builtin_types_table = [ ...@@ -91,7 +91,10 @@ builtin_types_table = [
("int", "PyInt_Type", []), ("int", "PyInt_Type", []),
("long", "PyLong_Type", []), ("long", "PyLong_Type", []),
("float", "PyFloat_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", []), ("bytes", "PyBytes_Type", []),
("str", "PyString_Type", []), ("str", "PyString_Type", []),
...@@ -340,10 +343,14 @@ def init_builtin_funcs(): ...@@ -340,10 +343,14 @@ def init_builtin_funcs():
for desc in builtin_function_table: for desc in builtin_function_table:
declare_builtin_func(*desc) declare_builtin_func(*desc)
builtin_types = {}
def init_builtin_types(): def init_builtin_types():
global builtin_types
for name, cname, funcs in builtin_types_table: for name, cname, funcs in builtin_types_table:
utility = builtin_utility_code.get(name) utility = builtin_utility_code.get(name)
the_type = builtin_scope.declare_builtin_type(name, cname, utility) the_type = builtin_scope.declare_builtin_type(name, cname, utility)
builtin_types[name] = the_type
for name, args, ret, cname in funcs: for name, args, ret, cname in funcs:
sig = Signature(args, ret) sig = Signature(args, ret)
the_type.scope.declare_cfunction(name, sig.function_type(), None, cname) the_type.scope.declare_cfunction(name, sig.function_type(), None, cname)
......
...@@ -1335,7 +1335,12 @@ class CFuncDefNode(FuncDefNode): ...@@ -1335,7 +1335,12 @@ class CFuncDefNode(FuncDefNode):
self.entry.inline_func_in_pxd = self.inline_in_pxd self.entry.inline_func_in_pxd = self.inline_in_pxd
self.return_type = type.return_type 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 import ExprNodes
py_func_body = self.call_self_node(is_module_scope = env.is_module_scope) py_func_body = self.call_self_node(is_module_scope = env.is_module_scope)
self.py_func = DefNode(pos = self.pos, self.py_func = DefNode(pos = self.pos,
...@@ -2669,6 +2674,11 @@ class CClassDefNode(ClassDefNode): ...@@ -2669,6 +2674,11 @@ class CClassDefNode(ClassDefNode):
return return
else: else:
home_scope = env 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( self.entry = home_scope.declare_c_class(
name = self.class_name, name = self.class_name,
pos = self.pos, pos = self.pos,
......
cdef extern from *:
ctypedef class __builtin__.list [object PyListObject]:
pass
cdef list foo = []
# This is too invasive for Python 0.11.x, re-enable in 0.12
NEW_ERRORS = u"""
:2:4: list already a builtin Cython type
"""
_ERRORS = u"""
:5:16: Cannot coerce list to type 'list'
"""
...@@ -3,3 +3,6 @@ cdef class A: ...@@ -3,3 +3,6 @@ cdef class A:
cpdef a(int not_self): cpdef a(int not_self):
pass pass
_ERRORS = u"""
3:10: Self argument (int) of C method 'a' does not match parent type (A)
"""
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