]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: write G_GNUC_DEPRECATED in generated C where appropriate
authorEvan Nemerson <evan@coeus-group.com>
Sat, 15 May 2010 22:16:36 +0000 (15:16 -0700)
committerJürg Billeter <j@bitron.ch>
Tue, 15 Jun 2010 18:40:27 +0000 (20:40 +0200)
ccode/valaccodedeclaration.vala
ccode/valaccodeenum.vala
ccode/valaccodeenumvalue.vala
ccode/valaccodefunction.vala
ccode/valaccodemodifiers.vala
ccode/valaccodestruct.vala
ccode/valaccodetypedefinition.vala
codegen/valaccodebasemodule.vala
codegen/valaccodedelegatemodule.vala
codegen/valaccodemethodmodule.vala
codegen/valaccodestructmodule.vala

index 79966f495271859405c1cd98eb91a5b711726a29..556174e65e347aa43a539cb57728aacadbfd0496 100644 (file)
@@ -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;
index c32664712028b073251d8b98b91047b1c4a5dfc6..26ebe543df3c031a6b8f27df732508b7b1f9ff44 100644 (file)
@@ -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<CCodeEnumValue> values = new ArrayList<CCodeEnumValue> ();
        
@@ -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 ();
        }
index 6dc784fd91678c308301d07907b5a640f701b712..e1c02513be9be1fbdf78c93e092c8529167742bf 100644 (file)
@@ -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.
         */
index faac0ec941f0b4c6d164808917e58c6411ea4af4..d414fb28b108ca1116aac1239031328d136b879e 100644 (file)
@@ -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 (" ");
index 90f6809c8b399540ef22e54a862f18701325f3b2..d2a96f212ee0101b8152cba8acf773c511f3a86e 100644 (file)
@@ -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
 }
index 7aa5c407c11916ffbf7d959769274c12d44a6712..20cae79961754a38a07bab661d2a4ec35e9b99f8 100644 (file)
@@ -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<CCodeDeclaration> declarations = new ArrayList<CCodeDeclaration> ();
        
@@ -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 ();
index f0723fc3e1873a1dda9a37258229b22e05c54629..84d6ce293b6f66c4896f1f56cced1275c2f4c17f 100644 (file)
@@ -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 ();
        }
index 2cfc9bbe55d6c0a187a253c41d0e844dfb97e5ab..24b0fb50a339e3a40a6c63624b616499f28144d5 100644 (file)
@@ -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 ()) {
index e503e6cebb3b7ccd0ccb90cf51b7903633e5faad..3b21bba2b3d1fc63259043dcfc6f5615f0c9b65c 100644 (file)
@@ -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);
        }
 
index 553c25c3a442131e18d17fb476058428fbc561eb..2e30afe2ce792e53d0f28b18494796748c1f835b 100644 (file)
@@ -179,6 +179,10 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
                        }
                }
 
+               if (m.deprecated) {
+                       function.modifiers |= CCodeModifiers.DEPRECATED;
+               }
+
                var cparam_map = new HashMap<int,CCodeFormalParameter> (direct_hash, direct_equal);
                var carg_map = new HashMap<int,CCodeExpression> (direct_hash, direct_equal);
 
index 7aceec0a2fac5dd1d629262dc9639d570fc895d6..d84cbb7a78b0f6136c74287a7fbedd1a13fd5184 100644 (file)
@@ -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;