]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support public static fields with initializers, fixes bug 506749
authorJuerg Billeter <j@bitron.ch>
Thu, 3 Jan 2008 15:55:08 +0000 (15:55 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 3 Jan 2008 15:55:08 +0000 (15:55 +0000)
2008-01-03  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala, ccode/valaccodemodifiers.vala:
  support public static fields with initializers, fixes bug 506749

* tests/classes-fields.exp, tests/classes-fields.vala: test public
  static fields

svn path=/trunk/; revision=801

ChangeLog
ccode/valaccodemodifiers.vala
gobject/valaccodegenerator.vala
tests/classes-fields.exp
tests/classes-fields.vala

index e0941e108338627f61276072723384f2e6ee79dc..5e176a96070cffb0df59b8e44fa91dfe99c42769 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-01-03  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodegenerator.vala, ccode/valaccodemodifiers.vala:
+         support public static fields with initializers, fixes bug 506749
+
+       * tests/classes-fields.exp, tests/classes-fields.vala: test public
+         static fields
+
 2008-01-03  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodegenerator.vala,
index d1a4a7a43e7ec900e36bac30267a759bf3d9ddf5..549f4202db62a11e21044037a5cea62b870939e8 100644 (file)
@@ -1,6 +1,6 @@
 /* valaccodemodifiers.vala
  *
- * Copyright (C) 2006-2007  Jürg Billeter, Raffaele Sandrini
+ * Copyright (C) 2006-2008  Jürg Billeter, Raffaele Sandrini
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -25,9 +25,9 @@ using GLib;
 
 [Flags]
 public enum Vala.CCodeModifiers {
-       NONE,
-       STATIC,
-       REGISTER,
-       EXTERN,
-       INLINE
+       NONE = 0,
+       STATIC = 1 << 0,
+       REGISTER = 1 << 1,
+       EXTERN = 1 << 2,
+       INLINE = 1 << 3
 }
index 0c7e789aa358cad1f7bcd345d896db59340fe8f3..7672863fe2ecda69add10e5faf845bd664ed8d78 100644 (file)
@@ -393,8 +393,21 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        } else {
                                var cdecl = new CCodeDeclaration (field_ctype);
                                cdecl.add_declarator (new CCodeVariableDeclarator (f.get_cname ()));
+                               cdecl.modifiers = CCodeModifiers.EXTERN;
                                header_type_member_declaration.append (cdecl);
 
+                               if (f.initializer != null) {
+                                       var init = (CCodeExpression) f.initializer.ccodenode;
+                                       if (is_constant_ccode_expression (init)) {
+                                               var cinit_decl = new CCodeDeclaration (field_ctype);
+                                               var var_decl = new CCodeVariableDeclarator (f.get_cname ());
+                                               var_decl.initializer = init;
+                                               cinit_decl.add_declarator (var_decl);
+                                               cinit_decl.modifiers = CCodeModifiers.EXTERN;
+                                               source_type_member_declaration.append (cinit_decl);
+                                       }
+                               }
+
                                lhs = new CCodeIdentifier (f.get_cname ());
                        }
                } else if (f.access == SymbolAccessibility.PRIVATE) {
index dae21516c6ea4f3280b1a601126e3acc398cd656..e7e68abc1bfdaec322c6a32f375bbf42cefb584a 100644 (file)
@@ -1 +1 @@
-Field Test: 1 2 3 4 5 6 7 8 9 10
+Field Test: 1 2 3 4 5 6 7 8 9 10 11 12
index c99023437f68c9460e7e64cb9aac3e616f07cfcc..1ab55a161a8ddd6bf48ddba85bb9658ae78df542 100644 (file)
@@ -8,16 +8,18 @@ class Maman.Bar : Foo {
        public int public_field = 3;
        private int private_field = 4;
        private static int private_static_field = 5;
+       public static int public_static_field = 6;
        
        void do_action () {
-               stdout.printf (" %d %d %d %d", public_base_field, public_field,
-                              private_field, private_static_field);
-               public_base_field = 6;
-               public_field = 7;
-               private_field = 8;
-               private_static_field = 9;
-               stdout.printf (" %d %d %d %d", public_base_field, public_field,
-                              private_field, private_static_field);
+               stdout.printf (" %d %d %d %d %d", public_base_field, public_field,
+                              private_field, private_static_field, public_static_field);
+               public_base_field = 7;
+               public_field = 8;
+               private_field = 9;
+               private_static_field = 10;
+               public_static_field = 11;
+               stdout.printf (" %d %d %d %d %d", public_base_field, public_field,
+                              private_field, private_static_field, public_static_field);
        }
 
        static int main (string[] args) {
@@ -26,7 +28,7 @@ class Maman.Bar : Foo {
                var bar = new Bar ();
                bar.do_action ();
                
-               stdout.printf (" 10\n");
+               stdout.printf (" 12\n");
                
                return 0;
        }