diff options
author | Jamie McCracken <jamie.mccrack gmail com> | 2010-05-24 14:33:09 -0400 |
---|---|---|
committer | Jamie McCracken <jamie.mccrack gmail com> | 2010-05-24 15:26:23 -0400 |
commit | fd302f141029546cb2a544803f8dc58caae07870 (patch) | |
tree | 807518a57d1fab89cff76be8b739677858d54c10 /vala/valagenieparser.vala | |
parent | c10644829f9509c84e12f62f5da0894c55d54576 (diff) | |
download | vala-fd302f141029546cb2a544803f8dc58caae07870.tar.gz |
Genie: Report error on duplicate constructor or destructor in class
Diffstat (limited to 'vala/valagenieparser.vala')
-rw-r--r-- | vala/valagenieparser.vala | 28 |
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"); } |