From: Juerg Billeter Date: Thu, 3 Jan 2008 15:55:08 +0000 (+0000) Subject: support public static fields with initializers, fixes bug 506749 X-Git-Tag: VALA_0_1_6~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71a80801debe5bbd0d908ccffca70c19c08782db;p=thirdparty%2Fvala.git support public static fields with initializers, fixes bug 506749 2008-01-03 Juerg Billeter * 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 --- diff --git a/ChangeLog b/ChangeLog index e0941e108..5e176a960 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-01-03 Jürg Billeter + + * 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 * gobject/valaccodegenerator.vala, diff --git a/ccode/valaccodemodifiers.vala b/ccode/valaccodemodifiers.vala index d1a4a7a43..549f4202d 100644 --- a/ccode/valaccodemodifiers.vala +++ b/ccode/valaccodemodifiers.vala @@ -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 } diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 0c7e789aa..7672863fe 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -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) { diff --git a/tests/classes-fields.exp b/tests/classes-fields.exp index dae21516c..e7e68abc1 100644 --- a/tests/classes-fields.exp +++ b/tests/classes-fields.exp @@ -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 diff --git a/tests/classes-fields.vala b/tests/classes-fields.vala index c99023437..1ab55a161 100644 --- a/tests/classes-fields.vala +++ b/tests/classes-fields.vala @@ -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; }