Commit 16bf4f76 authored by Robert Bradshaw's avatar Robert Bradshaw

Use C++ style constructor declarations rather than __init__.

parent bcb70be9
......@@ -1095,12 +1095,12 @@ class NewExprNode(AtomicExprNode):
type = entry.type.specialize_here(self.pos, template_types)
else:
type = entry.type
constructor = type.scope.lookup(u'__init__')
constructor = type.scope.lookup(u'<init>')
if constructor is None:
return_type = PyrexTypes.CFuncType(type, [])
return_type = PyrexTypes.CPtrType(return_type)
type.scope.declare_cfunction(u'__init__', return_type, self.pos)
constructor = type.scope.lookup(u'__init__')
type.scope.declare_cfunction(u'<init>', return_type, self.pos)
constructor = type.scope.lookup(u'<init>')
self.class_type = type
self.entry = constructor
self.type = constructor.type
......@@ -4282,8 +4282,7 @@ class NumBinopNode(BinopNode):
entry = env.lookup(type1.name)
function = entry.type.scope.lookup("operator%s" % self.operator)
if not function:
error(self.pos, "'%s' operator not defined for '%s %s %s'"
% (self.operator, type1, self.operator, type2))
self.type_error()
return
entry = PyrexTypes.best_match([self.operand1, self.operand2], function.all_alternatives(), self.pos)
if entry is None:
......@@ -4981,8 +4980,8 @@ class PrimaryCmpNode(NewTempExprNode, CmpNode):
entry = env.lookup(type1.name)
function = entry.type.scope.lookup("operator%s" % self.operator)
if not function:
error(self.pos, "'%s' operator not defined for '%s %s %s'"
% (self.operator, type1, self.operator, type2))
error(self.pos, "Invalid types for '%s' (%s, %s)" %
(self.operator, type1, type2))
return
entry = PyrexTypes.best_match([self.operand1, self.operand2], function.all_alternatives(), self.pos)
if entry is None:
......
......@@ -1634,6 +1634,8 @@ class CppClassScope(Scope):
def declare_cfunction(self, name, type, pos,
cname = None, visibility = 'extern', defining = 0,
api = 0, in_pxd = 0, modifiers = ()):
if name == self.name.split('::')[-1] and cname is None:
name = '<init>'
entry = self.declare_var(name, type, pos, cname, visibility)
def declare_inherited_cpp_attributes(self, base_scope):
......
cdef extern from "templates.h":
cdef cppclass TemplateTest1[T]:
__init__()
TemplateTest1()
T value
int t
T getValue()
cdef cppclass TemplateTest2[T, U]:
__init__()
TemplateTest2()
T value1
U value2
T getValue1()
......
......@@ -14,16 +14,16 @@ cdef extern from "shapes.h" namespace shapes:
cdef cppclass Circle(Shape):
int radius
__init__(int)
Circle(int)
cdef cppclass Rectangle(Shape):
int width
int height
__init__(int, int)
Rectangle(int, int)
cdef cppclass Square(Rectangle):
int side
__init__(int)
Square(int)
int constructor_count, destructor_count
......
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