From: Jamie McCracken Date: Mon, 24 May 2010 18:33:09 +0000 (-0400) Subject: Genie: Report error on duplicate constructor or destructor in class X-Git-Tag: 0.9.1~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd302f141029546cb2a544803f8dc58caae07870;p=thirdparty%2Fvala.git Genie: Report error on duplicate constructor or destructor in class --- diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala index 76e057ecf..a1305ea3d 100644 --- a/vala/valagenieparser.vala +++ b/vala/valagenieparser.vala @@ -2627,21 +2627,41 @@ public class Vala.Genie.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) { + } 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 { - cl.static_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 { Report.error (sym.source_reference, "unexpected declaration in class"); }