summaryrefslogtreecommitdiff
path: root/vala/valagenieparser.vala
diff options
context:
space:
mode:
authorJamie McCracken <jamie.mccrack gmail com>2010-05-24 14:33:09 -0400
committerJamie McCracken <jamie.mccrack gmail com>2010-05-24 15:26:23 -0400
commitfd302f141029546cb2a544803f8dc58caae07870 (patch)
tree807518a57d1fab89cff76be8b739677858d54c10 /vala/valagenieparser.vala
parentc10644829f9509c84e12f62f5da0894c55d54576 (diff)
downloadvala-fd302f141029546cb2a544803f8dc58caae07870.tar.gz
Genie: Report error on duplicate constructor or destructor in class
Diffstat (limited to 'vala/valagenieparser.vala')
-rw-r--r--vala/valagenieparser.vala28
1 files changed, 24 insertions, 4 deletions
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");
}