From: Evan Nemerson Date: Sat, 15 May 2010 22:16:36 +0000 (-0700) Subject: codegen: write G_GNUC_DEPRECATED in generated C where appropriate X-Git-Tag: 0.9.2~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2fb2383e5b878da9f3d800e492252115a76c387c;p=thirdparty%2Fvala.git codegen: write G_GNUC_DEPRECATED in generated C where appropriate --- diff --git a/ccode/valaccodedeclaration.vala b/ccode/valaccodedeclaration.vala index 79966f495..556174e65 100644 --- a/ccode/valaccodedeclaration.vala +++ b/ccode/valaccodedeclaration.vala @@ -30,7 +30,7 @@ public class Vala.CCodeDeclaration : CCodeStatement { * The type of the local variable. */ public string type_name { get; set; } - + /** * The declaration modifier. */ @@ -95,6 +95,10 @@ public class Vala.CCodeDeclaration : CCodeStatement { decl.write (writer); } + if (CCodeModifiers.DEPRECATED in modifiers) { + writer.write_string (" G_GNUC_DEPRECATED"); + } + writer.write_string (";"); writer.write_newline (); return; diff --git a/ccode/valaccodeenum.vala b/ccode/valaccodeenum.vala index c32664712..26ebe543d 100644 --- a/ccode/valaccodeenum.vala +++ b/ccode/valaccodeenum.vala @@ -30,6 +30,11 @@ public class Vala.CCodeEnum : CCodeNode { * The name of this enum. */ public string name { get; set; } + + /** + * Whether the enum is deprecated. + */ + public bool deprecated { get; set; default = false; } private List values = new ArrayList (); @@ -71,6 +76,9 @@ public class Vala.CCodeEnum : CCodeNode { writer.write_string (" "); writer.write_string (name); } + if (deprecated) { + writer.write_string (" G_GNUC_DEPRECATED"); + } writer.write_string (";"); writer.write_newline (); } diff --git a/ccode/valaccodeenumvalue.vala b/ccode/valaccodeenumvalue.vala index 6dc784fd9..e1c02513b 100644 --- a/ccode/valaccodeenumvalue.vala +++ b/ccode/valaccodeenumvalue.vala @@ -31,6 +31,11 @@ public class Vala.CCodeEnumValue : CCodeNode { */ public string name { get; set; } + /** + * Whether this enum value is deprecated. + */ + public bool deprecated { get; set; default = false; } + /** * The numerical representation of this enum value. */ diff --git a/ccode/valaccodefunction.vala b/ccode/valaccodefunction.vala index faac0ec94..d414fb28b 100644 --- a/ccode/valaccodefunction.vala +++ b/ccode/valaccodefunction.vala @@ -117,6 +117,10 @@ public class Vala.CCodeFunction : CCodeNode { writer.write_string (")"); + if (CCodeModifiers.DEPRECATED in modifiers) { + writer.write_string (" G_GNUC_DEPRECATED"); + } + if (block == null) { if (attributes != null) { writer.write_string (" "); diff --git a/ccode/valaccodemodifiers.vala b/ccode/valaccodemodifiers.vala index 90f6809c8..d2a96f212 100644 --- a/ccode/valaccodemodifiers.vala +++ b/ccode/valaccodemodifiers.vala @@ -30,5 +30,6 @@ public enum Vala.CCodeModifiers { REGISTER = 1 << 1, EXTERN = 1 << 2, INLINE = 1 << 3, - VOLATILE = 1 << 4 + VOLATILE = 1 << 4, + DEPRECATED = 1 << 5 } diff --git a/ccode/valaccodestruct.vala b/ccode/valaccodestruct.vala index 7aa5c407c..20cae7996 100644 --- a/ccode/valaccodestruct.vala +++ b/ccode/valaccodestruct.vala @@ -30,6 +30,11 @@ public class Vala.CCodeStruct : CCodeNode { * The struct name. */ public string name { get; set; } + + /** + * Whether the struct is deprecated. + */ + public bool deprecated { get; set; default = false; } private List declarations = new ArrayList (); @@ -65,7 +70,11 @@ public class Vala.CCodeStruct : CCodeNode { foreach (CCodeDeclaration decl in declarations) { decl.write_declaration (writer); } + writer.write_end_block (); + if (deprecated) { + writer.write_string (" G_GNUC_DEPRECATED"); + } writer.write_string (";"); writer.write_newline (); writer.write_newline (); diff --git a/ccode/valaccodetypedefinition.vala b/ccode/valaccodetypedefinition.vala index f0723fc3e..84d6ce293 100644 --- a/ccode/valaccodetypedefinition.vala +++ b/ccode/valaccodetypedefinition.vala @@ -35,6 +35,11 @@ public class Vala.CCodeTypeDefinition : CCodeNode { * The type declarator. */ public CCodeDeclarator declarator { get; set; } + + /** + * Whether the type is deprecated. + */ + public bool deprecated { get; set; default = false; } public CCodeTypeDefinition (string type, CCodeDeclarator decl) { type_name = type; @@ -53,7 +58,11 @@ public class Vala.CCodeTypeDefinition : CCodeNode { writer.write_string (" "); declarator.write_declaration (writer); - + + if (deprecated) { + writer.write_string (" G_GNUC_DEPRECATED"); + } + writer.write_string (";"); writer.write_newline (); } diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 2cfc9bbe5..24b0fb50a 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -767,13 +767,18 @@ public class Vala.CCodeBaseModule : CCodeModule { var cenum = new CCodeEnum (en.get_cname ()); + cenum.deprecated = en.deprecated; + foreach (EnumValue ev in en.get_values ()) { + CCodeEnumValue c_ev; if (ev.value == null) { - cenum.add_value (new CCodeEnumValue (ev.get_cname ())); + c_ev = new CCodeEnumValue (ev.get_cname ()); } else { ev.value.accept (codegen); - cenum.add_value (new CCodeEnumValue (ev.get_cname (), (CCodeExpression) ev.value.ccodenode)); + c_ev = new CCodeEnumValue (ev.get_cname (), (CCodeExpression) ev.value.ccodenode); } + c_ev.deprecated = ev.deprecated; + cenum.add_value (c_ev); } decl_space.add_type_definition (cenum); @@ -879,7 +884,7 @@ public class Vala.CCodeBaseModule : CCodeModule { } else { cdecl.modifiers = CCodeModifiers.EXTERN; } - + decl_space.add_constant_declaration (cdecl); } else { var cdefine = new CCodeMacroReplacement.with_expression (c.get_cname (), (CCodeExpression) c.initializer.ccodenode); @@ -918,6 +923,9 @@ public class Vala.CCodeBaseModule : CCodeModule { } else { cdecl.modifiers = CCodeModifiers.EXTERN; } + if (f.deprecated) { + cdecl.modifiers |= CCodeModifiers.DEPRECATED; + } decl_space.add_type_member_declaration (cdecl); if (f.get_lock_used ()) { diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala index e503e6ceb..3b21bba2b 100644 --- a/codegen/valaccodedelegatemodule.vala +++ b/codegen/valaccodedelegatemodule.vala @@ -110,6 +110,8 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule { } var ctypedef = new CCodeTypeDefinition (return_type_cname, cfundecl); + ctypedef.deprecated = d.deprecated; + decl_space.add_type_definition (ctypedef); } diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala index 553c25c3a..2e30afe2c 100644 --- a/codegen/valaccodemethodmodule.vala +++ b/codegen/valaccodemethodmodule.vala @@ -179,6 +179,10 @@ public class Vala.CCodeMethodModule : CCodeStructModule { } } + if (m.deprecated) { + function.modifiers |= CCodeModifiers.DEPRECATED; + } + var cparam_map = new HashMap (direct_hash, direct_equal); var carg_map = new HashMap (direct_hash, direct_equal); diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala index 7aceec0a2..d84cbb7a7 100644 --- a/codegen/valaccodestructmodule.vala +++ b/codegen/valaccodestructmodule.vala @@ -63,6 +63,7 @@ public class Vala.CCodeStructModule : CCodeBaseModule { } var instance_struct = new CCodeStruct ("_%s".printf (st.get_cname ())); + instance_struct.deprecated = st.deprecated; foreach (Field f in st.get_fields ()) { string field_ctype = f.field_type.get_cname (); @@ -73,7 +74,7 @@ public class Vala.CCodeStructModule : CCodeBaseModule { if (f.binding == MemberBinding.INSTANCE) { generate_type_declaration (f.field_type, decl_space); - instance_struct.add_field (field_ctype, f.get_cname () + f.field_type.get_cdeclarator_suffix ()); + instance_struct.add_field (field_ctype, f.get_cname () + f.field_type.get_cdeclarator_suffix (), f.deprecated ? " G_GNUC_DEPRECATED" : null); if (f.field_type is ArrayType && !f.no_array_length) { // create fields to store array dimensions var array_type = (ArrayType) f.field_type;