fix state changes in `requires' elements support flags and use name
authorJuerg Billeter <j@bitron.ch>
Fri, 19 Oct 2007 14:05:37 +0000 (14:05 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 19 Oct 2007 14:05:37 +0000 (14:05 +0000)
2007-10-19  Juerg Billeter  <j@bitron.ch>

* gobject-introspection/gidlparser.c: fix state changes in `requires'
  elements
* vapigen/valagidlparser.vala: support flags and use name attribute
  of object elements

svn path=/trunk/; revision=657

ChangeLog
gobject-introspection/gidlparser.c
vapigen/valagidlparser.vala

index 081d706..001d047 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-10-19  Jürg Billeter  <j@bitron.ch>
 
+       * gobject-introspection/gidlparser.c: fix state changes in `requires'
+         elements
+       * vapigen/valagidlparser.vala: support flags and use name attribute
+         of object elements
+
+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
index b774bb9..adc0723 100644 (file)
@@ -1945,7 +1945,8 @@ end_element_handler (GMarkupParseContext *context,
         ctx->state = STATE_OBJECT;
       break;
     case STATE_REQUIRES:
-      ctx->state = STATE_INTERFACE;
+      if (strcmp (element_name, "requires") == 0)
+        ctx->state = STATE_INTERFACE;
       break;
     case STATE_PARAMETERS:
       if (strcmp (element_name, "parameters") == 0)
index 82ee26c..20871ec 100644 (file)
@@ -235,6 +235,12 @@ public class Vala.GIdlParser : CodeVisitor {
                                en.name = fix_type_name (en.name, ns);
                                ns.add_enum (en);
                                current_source_file.add_node (en);
+                       } else if (node.type == IdlNodeTypeId.FLAGS) {
+                               var en = parse_enum ((IdlNodeEnum) node);
+                               en.name = fix_type_name (en.name, ns);
+                               en.is_flags = true;
+                               ns.add_enum (en);
+                               current_source_file.add_node (en);
                        } else if (node.type == IdlNodeTypeId.OBJECT) {
                                parse_object ((IdlNodeInterface) node, ns, module);
                        } else if (node.type == IdlNodeTypeId.INTERFACE) {
@@ -580,7 +586,7 @@ public class Vala.GIdlParser : CodeVisitor {
        }
        
        private void parse_object (IdlNodeInterface! node, Namespace! ns, IdlModule! module) {
-               string name = fix_type_name (node.gtype_name, ns);
+               string name = fix_type_name (((IdlNode) node).name, ns);
 
                string base_class = null;