]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Allow setting cname of ErrorCode.
authorLuca Bruno <lucabru@src.gnome.org>
Thu, 30 Dec 2010 12:20:25 +0000 (13:20 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Mon, 4 Apr 2011 13:14:46 +0000 (15:14 +0200)
vala/valacodewriter.vala
vala/valaerrorcode.vala
vala/valagirparser.vala

index b6e31c27284b39e9a2fbb7e5617002ae6bb25e88..847852e8b7818923f76ea3b84fad1fd9b71c9902 100644 (file)
@@ -677,6 +677,10 @@ public class Vala.CodeWriter : CodeVisitor {
        }
 
        public override void visit_error_code (ErrorCode ecode) {
+               if (ecode.get_cname () != ecode.get_default_cname ()) {
+                       write_indent ();
+                       write_string ("[CCode (cname = \"%s\")]".printf (ecode.get_cname ()));
+               }
                write_indent ();
                write_identifier (ecode.name);
                write_string (",");
index 4102feda01a104771974411bff8fe2e2b51a54c8..eace48cce8a2ff6136d025ea3cf21b5dac72e188 100644 (file)
@@ -67,16 +67,41 @@ public class Vala.ErrorCode : TypeSymbol {
 
        public override string get_cname (bool const_type = false) {
                if (cname == null) {
-                       var edomain = (ErrorDomain) parent_symbol;
-                       cname = "%s%s".printf (edomain.get_cprefix (), name);
+                       cname = get_default_cname ();
                }
                return cname;
        }
 
+       public string get_default_cname () {
+               var edomain = (ErrorDomain) parent_symbol;
+               return "%s%s".printf (edomain.get_cprefix (), name);
+       }
+
+       public void set_cname (string value) {
+               this.cname = value;
+       }
+
        public override string? get_lower_case_cname (string? infix) {
                return get_cname ().down ();
        }
 
+       private void process_ccode_attribute (Attribute a) {
+               if (a.has_argument ("cname")) {
+                       cname = a.get_string ("cname");
+               }
+       }
+
+       /**
+        * Process all associated attributes.
+        */
+       public void process_attributes () {
+               foreach (Attribute a in attributes) {
+                       if (a.name == "CCode") {
+                               process_ccode_attribute (a);
+                       }
+               }
+       }
+
        public override bool check (CodeContext context) {
                if (checked) {
                        return !error;
@@ -84,6 +109,8 @@ public class Vala.ErrorCode : TypeSymbol {
 
                checked = true;
 
+               process_attributes ();
+
                if (value != null) {
                        value.check (context);
                }
index 0a8b91be05ab504b845e53ca9c5a06ada5ea4ebe..e93b73dbdf97eb8f0256137649b6b83e6a19bde5 100644 (file)
@@ -1708,6 +1708,7 @@ public class Vala.GirParser : CodeVisitor {
                } else {
                        ec = new ErrorCode (name);
                }
+               ec.set_cname (reader.get_attribute ("c:identifier"));
 
                next ();
                end_element ("member");