]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Report error on duplicate constructor or destructor in class
authorJürg Billeter <j@bitron.ch>
Fri, 8 Jan 2010 21:59:38 +0000 (22:59 +0100)
committerJürg Billeter <j@bitron.ch>
Fri, 8 Jan 2010 21:59:38 +0000 (22:59 +0100)
Fixes bug 600581.

vala/valaparser.vala

index 04e83038a279b0dd55f947b414abd5a59a54482e..ea5df106c1b98811dea9037e084c3ee8304d8aab 100644 (file)
@@ -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 {