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