if ((modifiers & CCodeModifiers.REGISTER) == CCodeModifiers.REGISTER) {
writer.write_string ("register ");
}
+ if ((modifiers & CCodeModifiers.VOLATILE) != 0) {
+ writer.write_string ("volatile ");
+ }
writer.write_string (type_name);
writer.write_string (" ");
decl.write_declaration (writer);
}
+ if (CCodeModifiers.DEPRECATED in modifiers) {
+ writer.write_string (" G_GNUC_DEPRECATED");
+ }
+
writer.write_string (";");
writer.write_newline ();
}
* @param type_name field type
* @param name member name
*/
- public void add_field (string type_name, string name, CCodeDeclaratorSuffix? declarator_suffix = null) {
+ public void add_field (string type_name, string name, CCodeModifiers modifiers = 0, CCodeDeclaratorSuffix? declarator_suffix = null) {
var decl = new CCodeDeclaration (type_name);
decl.add_declarator (new CCodeVariableDeclarator (name, null, declarator_suffix));
+ decl.modifiers = modifiers;
add_declaration (decl);
}
}
public class Vala.CCodeDeclaratorSuffix {
- public bool array;
- public CCodeExpression? array_length;
- public bool deprecated;
+ bool array;
+ CCodeExpression? array_length;
public CCodeDeclaratorSuffix.with_array (CCodeExpression? array_length = null) {
this.array_length = array_length;
}
writer.write_string ("]");
}
-
- if (deprecated) {
- writer.write_string (" G_GNUC_DEPRECATED");
- }
}
}
generate_type_declaration (f.variable_type, decl_space);
- string field_ctype = get_ccode_name (f.variable_type);
- if (f.is_volatile) {
- field_ctype = "volatile " + field_ctype;
- }
-
- var cdecl = new CCodeDeclaration (field_ctype);
+ var cdecl = new CCodeDeclaration (get_ccode_name (f.variable_type));
cdecl.add_declarator (new CCodeVariableDeclarator (get_ccode_name (f), null, get_ccode_declarator_suffix (f.variable_type)));
if (f.is_private_symbol ()) {
cdecl.modifiers = CCodeModifiers.STATIC;
if (f.version.deprecated) {
cdecl.modifiers |= CCodeModifiers.DEPRECATED;
}
+ if (f.is_volatile) {
+ cdecl.modifiers |= CCodeModifiers.VOLATILE;
+ }
decl_space.add_type_member_declaration (cdecl);
if (f.get_lock_used ()) {
CCodeExpression lhs = null;
- string field_ctype = get_ccode_name (f.variable_type);
- if (f.is_volatile) {
- field_ctype = "volatile " + field_ctype;
- }
-
if (f.binding == MemberBinding.INSTANCE) {
if (is_gtypeinstance && f.access == SymbolAccessibility.PRIVATE) {
lhs = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), get_ccode_name (f));
}
}
- var var_def = new CCodeDeclaration (field_ctype);
+ var var_def = new CCodeDeclaration (get_ccode_name (f.variable_type));
var_def.add_declarator (var_decl);
if (!f.is_private_symbol ()) {
var_def.modifiers = CCodeModifiers.EXTERN;
} else {
var_def.modifiers = CCodeModifiers.STATIC;
}
+ if (f.version.deprecated) {
+ var_def.modifiers |= CCodeModifiers.DEPRECATED;
+ }
+ if (f.is_volatile) {
+ var_def.modifiers |= CCodeModifiers.VOLATILE;
+ }
cfile.add_type_member_declaration (var_def);
/* add array length fields where necessary */
if (local.captured) {
generate_type_declaration (local.variable_type, cfile);
- data.add_field (get_ccode_name (local.variable_type), get_local_cname (local), get_ccode_declarator_suffix (local.variable_type));
+ data.add_field (get_ccode_name (local.variable_type), get_local_cname (local), 0, get_ccode_declarator_suffix (local.variable_type));
if (local.variable_type is ArrayType) {
var array_type = (ArrayType) local.variable_type;
}
emit_context.closure_variable_count_map.set (local.name, count + 1);
- closure_struct.add_field (get_ccode_name (local.variable_type), get_local_cname (local), get_ccode_declarator_suffix (local.variable_type));
+ closure_struct.add_field (get_ccode_name (local.variable_type), get_local_cname (local), 0, get_ccode_declarator_suffix (local.variable_type));
} else {
var cvar = new CCodeVariableDeclarator (get_local_cname (local), null, get_ccode_declarator_suffix (local.variable_type));
instance_struct.deprecated = st.version.deprecated;
foreach (Field f in st.get_fields ()) {
- string field_ctype = get_ccode_name (f.variable_type);
- if (f.is_volatile) {
- field_ctype = "volatile " + field_ctype;
- }
-
if (f.binding == MemberBinding.INSTANCE) {
generate_type_declaration (f.variable_type, decl_space);
-
- var suffix = get_ccode_declarator_suffix (f.variable_type);
- if (suffix != null) {
- suffix.deprecated = f.version.deprecated;
- }
-
- instance_struct.add_field (field_ctype, get_ccode_name (f), suffix);
+ CCodeModifiers modifiers = (f.is_volatile ? CCodeModifiers.VOLATILE : 0) | (f.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
+ instance_struct.add_field (get_ccode_name (f.variable_type), get_ccode_name (f), modifiers, get_ccode_declarator_suffix (f.variable_type));
if (f.variable_type is ArrayType && get_ccode_array_length (f)) {
// create fields to store array dimensions
var array_type = (ArrayType) f.variable_type;
}
foreach (Field f in cl.get_fields ()) {
- string field_ctype = get_ccode_name (f.variable_type);
- if (f.is_volatile) {
- field_ctype = "volatile %s".printf (field_ctype);
- }
-
if (f.access != SymbolAccessibility.PRIVATE) {
+ CCodeModifiers modifiers = (f.is_volatile ? CCodeModifiers.VOLATILE : 0) | (f.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
if (f.binding == MemberBinding.INSTANCE) {
generate_type_declaration (f.variable_type, decl_space);
- instance_struct.add_field (field_ctype, get_ccode_name (f), get_ccode_declarator_suffix (f.variable_type));
+ instance_struct.add_field (get_ccode_name (f.variable_type), get_ccode_name (f), modifiers, get_ccode_declarator_suffix (f.variable_type));
if (f.variable_type is ArrayType && get_ccode_array_length (f)) {
// create fields to store array dimensions
var array_type = (ArrayType) f.variable_type;
}
}
} else if (f.binding == MemberBinding.CLASS) {
- type_struct.add_field (field_ctype, get_ccode_name (f));
+ type_struct.add_field (get_ccode_name (f.variable_type), get_ccode_name (f), modifiers);
}
}
}
}
foreach (Field f in cl.get_fields ()) {
- string field_ctype = get_ccode_name (f.variable_type);
- if (f.is_volatile) {
- field_ctype = "volatile %s".printf (field_ctype);
- }
-
+ CCodeModifiers modifiers = (f.is_volatile ? CCodeModifiers.VOLATILE : 0) | (f.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
if (f.binding == MemberBinding.INSTANCE) {
if (f.access == SymbolAccessibility.PRIVATE) {
generate_type_declaration (f.variable_type, decl_space);
- instance_priv_struct.add_field (field_ctype, get_ccode_name (f), get_ccode_declarator_suffix (f.variable_type));
+ instance_priv_struct.add_field (get_ccode_name (f.variable_type), get_ccode_name (f), modifiers, get_ccode_declarator_suffix (f.variable_type));
if (f.variable_type is ArrayType && get_ccode_array_length (f)) {
// create fields to store array dimensions
var array_type = (ArrayType) f.variable_type;
}
} else if (f.binding == MemberBinding.CLASS) {
if (f.access == SymbolAccessibility.PRIVATE) {
- type_priv_struct.add_field (field_ctype, get_ccode_name (f));
+ type_priv_struct.add_field (get_ccode_name (f.variable_type), get_ccode_name (f), modifiers);
}
if (f.get_lock_used ()) {
gir/bug651773.test \
gir/bug667751.test \
gir/bug742012.test \
+ annotations/deprecated.vala \
$(NULL)
check-TESTS: $(TESTS)
--- /dev/null
+[Version (deprecated = true)]
+struct FooStruct {
+ [Version (deprecated = true)]
+ public int bar;
+}
+
+void test_struct_field () {
+ FooStruct foo = { 42 };
+ var i = foo.bar;
+ foo.bar = i;
+ assert (foo.bar == 42);
+}
+
+[Version (deprecated = true)]
+class FooClass : Object {
+ [Version (deprecated = true)]
+ public int bar { get; set; default = 42; }
+ [Version (deprecated = true)]
+ public int baz;
+}
+
+void test_class_property () {
+ var foo = new FooClass ();
+ var i = foo.bar;
+ foo.bar = i;
+ assert (foo.bar == 42);
+}
+
+void main () {
+ test_class_property ();
+ test_struct_field ();
+}
*/
public bool is_constructv_chainup { get; private set; }
- public Expression _call;
+ private Expression _call;
private List<Expression> argument_list = new ArrayList<Expression> ();