support Flags attribute support Flags and ErrorDomain attributes for enums
authorJuerg Billeter <j@bitron.ch>
Fri, 19 Oct 2007 13:29:18 +0000 (13:29 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 19 Oct 2007 13:29:18 +0000 (13:29 +0000)
2007-10-19  Juerg Billeter  <j@bitron.ch>

* vala/valaenum.vala: support Flags attribute
* vala/valainterfacewriter.vala: support Flags and ErrorDomain
  attributes for enums and add `break' to keyword list

svn path=/trunk/; revision=656

ChangeLog
vala/valaenum.vala
vala/valainterfacewriter.vala

index e58fac3..081d706 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2007-10-19  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valaenum.vala: support Flags attribute
+       * vala/valainterfacewriter.vala: support Flags and ErrorDomain
+         attributes for enums and add `break' to keyword list
+
+2007-10-19  Jürg Billeter  <j@bitron.ch>
+
        * vapi/packages/gstreamer-0.10/gstreamer-0.10.metadata: add ellipsis
          attribute for some functions, patch by Andrea Del Signore
        * vapi/gstreamer-0.10.vapi: regenerated
index d9da966..2c20e6f 100644 (file)
@@ -28,6 +28,11 @@ using Gee;
  */
 public class Vala.Enum : DataType {
        /**
+        * Specifies whether this is a flags enum.
+        */
+       public bool is_flags { get; set; }
+
+       /**
         * Specifies whether this enum represents an error domain.
         */
        public bool error_domain { get; set; }
@@ -192,6 +197,8 @@ public class Vala.Enum : DataType {
                foreach (Attribute a in attributes) {
                        if (a.name == "CCode") {
                                process_ccode_attribute (a);
+                       } else if (a.name == "Flags") {
+                               is_flags = true;
                        } else if (a.name == "ErrorDomain") {
                                error_domain = true;
                        }
index 4d72ab3..594bd14 100644 (file)
@@ -301,6 +301,15 @@ public class Vala.InterfaceWriter : CodeVisitor {
                }
                write_string ("[CCode (cprefix = \"%s\", cheader_filename = \"%s\")]".printf (en.get_cprefix (), cheaders));
 
+               if (en.is_flags) {
+                       write_indent ();
+                       write_string ("[Flags]");
+               }
+               if (en.error_domain) {
+                       write_indent ();
+                       write_string ("[ErrorDomain]");
+               }
+
                write_indent ();
                write_string ("public enum ");
                write_identifier (en.name);
@@ -639,11 +648,11 @@ public class Vala.InterfaceWriter : CodeVisitor {
        }
        
        private void write_identifier (string! s) {
-               if (s == "base" || s == "class" ||s == "construct" || 
-                   s == "delegate" || s == "do" || s == "foreach" ||
-                   s == "in" || s == "interface" || s == "lock" ||
-                   s == "namespace" || s == "new" || s == "out" ||
-                   s == "ref" || s == "signal") {
+               if (s == "base" || s == "break" || s == "class" ||
+                   s == "construct" || s == "delegate" || s == "do" ||
+                   s == "foreach" || s == "in" || s == "interface" ||
+                   s == "lock" || s == "namespace" || s == "new" ||
+                   s == "out" || s == "ref" || s == "signal") {
                        stream.putc ('@');
                }
                write_string (s);