]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Genie: Report error on duplicate constructor or destructor in class
authorJamie McCracken <jamie.mccrack gmail com>
Mon, 24 May 2010 18:33:09 +0000 (14:33 -0400)
committerJamie McCracken <jamie.mccrack gmail com>
Mon, 24 May 2010 19:26:23 +0000 (15:26 -0400)
vala/valagenieparser.vala

index 76e057ecf7629d7dff7f26bae89846569d425cb9..a1305ea3d4eb0f3789117a4a86c938d0f48ad62d 100644 (file)
@@ -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");
                }