+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,
/* 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
[Flags]
public enum Vala.CCodeModifiers {
- NONE,
- STATIC,
- REGISTER,
- EXTERN,
- INLINE
+ NONE = 0,
+ STATIC = 1 << 0,
+ REGISTER = 1 << 1,
+ EXTERN = 1 << 2,
+ INLINE = 1 << 3
}
} 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) {
-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
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) {
var bar = new Bar ();
bar.do_action ();
- stdout.printf (" 10\n");
+ stdout.printf (" 12\n");
return 0;
}