From: Jürg Billeter Date: Fri, 8 Jan 2010 21:59:38 +0000 (+0100) Subject: Report error on duplicate constructor or destructor in class X-Git-Tag: 0.7.10~117 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=edf34ae7a9e18334c817c58d5ae5c02a07083ac8;p=thirdparty%2Fvala.git Report error on duplicate constructor or destructor in class Fixes bug 600581. --- diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 04e83038a..ea5df106c 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -2180,19 +2180,37 @@ public class Vala.Parser : CodeVisitor { } else if (sym is Constructor) { var c = (Constructor) sym; if (c.binding == MemberBinding.INSTANCE) { + if (cl.constructor != null) { + Report.error (c.source_reference, "class already contains a constructor"); + } cl.constructor = c; } else if (c.binding == MemberBinding.CLASS) { + if (cl.class_constructor != null) { + Report.error (c.source_reference, "class already contains a class constructor"); + } cl.class_constructor = c; } else { + if (cl.static_constructor != null) { + Report.error (c.source_reference, "class already contains a static constructor"); + } cl.static_constructor = c; } } else if (sym is Destructor) { var d = (Destructor) sym; if (d.binding == MemberBinding.STATIC) { + if (cl.static_destructor != null) { + Report.error (d.source_reference, "class already contains a static destructor"); + } cl.static_destructor = (Destructor) d; } else if (d.binding == MemberBinding.CLASS) { + if (cl.class_destructor != null) { + Report.error (d.source_reference, "class already contains a class destructor"); + } cl.class_destructor = (Destructor) d; } else { + if (cl.destructor != null) { + Report.error (d.source_reference, "class already contains a destructor"); + } cl.destructor = (Destructor) d; } } else {