]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Report error when using class fields or constructors in compact classes,
authorJürg Billeter <j@bitron.ch>
Tue, 16 Dec 2008 23:46:11 +0000 (23:46 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 16 Dec 2008 23:46:11 +0000 (23:46 +0000)
2008-12-17  Jürg Billeter  <j@bitron.ch>

* 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

ChangeLog
gobject/valaccodebasemodule.vala
gobject/valagobjectmodule.vala

index 90cb3a25de0ba4039dcc7ac7ebc6fd31b63a6d08..a863eb7176b0cb3bca57cde2d415d98f84fa7ab6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-12-17  Jürg Billeter  <j@bitron.ch>
+
+       * 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  <j@bitron.ch>
 
        * gobject/valaccodearraymodule.vala:
index bfc3008f2cb651958d6593309b457433e827fa3f..e3d566d36fa738a6ebc0b697058db01a4892ab3b 100644 (file)
@@ -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 {
index 47d7c081090d7be763b1d2adb95551176562da47..3952bf238398255f8adc9ff6189c52f1c678c55c 100644 (file)
@@ -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