From: Jürg Billeter Date: Tue, 16 Dec 2008 23:46:11 +0000 (+0000) Subject: Report error when using class fields or constructors in compact classes, X-Git-Tag: VALA_0_5_4~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=332f1ef24e3cd975f47f2e51f150fd12ebc57ba4;p=thirdparty%2Fvala.git Report error when using class fields or constructors in compact classes, 2008-12-17 Jürg Billeter * gobject/valaccodebasemodule.vala: * gobject/valagobjectmodule.vala: Report error when using class fields or constructors in compact classes, fixes bug 564090 svn path=/trunk/; revision=2198 --- diff --git a/ChangeLog b/ChangeLog index 90cb3a25d..a863eb717 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-12-17 Jürg Billeter + + * gobject/valaccodebasemodule.vala: + * gobject/valagobjectmodule.vala: + + Report error when using class fields or constructors in compact + classes, fixes bug 564090 + 2008-12-17 Jürg Billeter * gobject/valaccodearraymodule.vala: diff --git a/gobject/valaccodebasemodule.vala b/gobject/valaccodebasemodule.vala index bfc3008f2..e3d566d36 100644 --- a/gobject/valaccodebasemodule.vala +++ b/gobject/valaccodebasemodule.vala @@ -807,6 +807,12 @@ public class Vala.CCodeBaseModule : CCodeModule { lhs = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), f.get_cname ()); } else if (f.binding == MemberBinding.CLASS) { + if (!is_gtypeinstance) { + Report.error (f.source_reference, "class fields are not supported in compact classes"); + f.error = true; + return; + } + st = type_struct; } else { var cdecl = new CCodeDeclaration (field_ctype); @@ -841,6 +847,12 @@ public class Vala.CCodeBaseModule : CCodeModule { lhs = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), f.get_cname ()); } } else if (f.binding == MemberBinding.CLASS) { + if (!is_gtypeinstance) { + Report.error (f.source_reference, "class fields are not supported in compact classes"); + f.error = true; + return; + } + st = type_priv_struct; lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("klass"), "priv"), f.get_cname ()); } else { diff --git a/gobject/valagobjectmodule.vala b/gobject/valagobjectmodule.vala index 47d7c0810..3952bf238 100644 --- a/gobject/valagobjectmodule.vala +++ b/gobject/valagobjectmodule.vala @@ -1705,6 +1705,12 @@ public class Vala.GObjectModule : GTypeModule { } else if (c.binding == MemberBinding.CLASS) { // class constructor + if (cl.is_compact) { + Report.error (c.source_reference, "class constructors are not supported in compact classes"); + c.error = true; + return; + } + if (current_method_inner_error) { /* always separate error parameter and inner_error local variable * as error may be set to NULL but we're always interested in inner errors @@ -1719,6 +1725,12 @@ public class Vala.GObjectModule : GTypeModule { // static class constructor // add to class_init + if (cl.is_compact) { + Report.error (c.source_reference, "static constructors are not supported in compact classes"); + c.error = true; + return; + } + if (current_method_inner_error) { /* always separate error parameter and inner_error local variable * as error may be set to NULL but we're always interested in inner errors