gobject-introspection r669 - in trunk: . giscanner



Author: johan
Date: Sat Oct 11 21:50:46 2008
New Revision: 669
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=669&view=rev

Log:
2008-10-11  Johan Dahlin  <johan gnome org>

    * giscanner/girparser.py:
    Also parse enums which are not glib types.



Modified:
   trunk/ChangeLog
   trunk/giscanner/girparser.py

Modified: trunk/giscanner/girparser.py
==============================================================================
--- trunk/giscanner/girparser.py	(original)
+++ trunk/giscanner/girparser.py	Sat Oct 11 21:50:46 2008
@@ -20,8 +20,8 @@
 
 from xml.etree.cElementTree import parse
 
-from .ast import (Alias, Callback, Function, Field, Parameter, Property,
-                  Return, Union, Struct, Type, Array, Namespace, Varargs)
+from .ast import (Alias, Array, Callback, Enum, Function, Field, Namespace,
+                  Parameter, Property, Return, Union, Struct, Type, Varargs)
 from .glibast import (GLibEnum, GLibEnumMember, GLibFlags,
                       GLibInterface, GLibObject, GLibBoxedStruct,
                       GLibBoxedUnion, GLibBoxedOther)
@@ -257,13 +257,25 @@
                               node.attrib.get(_glibns('nick')))
 
     def _parse_enumeration_bitfield(self, node):
-        klass = (GLibFlags if node.tag == _corens('bitfield') else GLibEnum)
+        name = node.attrib.get('name')
+        ctype = node.attrib.get(_cns('type'))
+        get_type = node.attrib.get(_glibns('get-type'))
+        type_name = node.attrib.get(_glibns('type-name'))
+        if get_type:
+            if node.tag == _corens('bitfield'):
+                klass = GLibFlags
+            else:
+                klass = GLibEnum
+        else:
+            klass = Enum
+            type_name = ctype
         members = []
         for member in node.findall(_corens('member')):
             members.append(self._parse_member(member))
-        obj = klass(node.attrib.get('name'),
-                    node.attrib.get(_glibns('type-name')),
-                    members,
-                    node.attrib.get(_glibns('get-type')))
-        obj.ctype = node.attrib.get(_cns('type'))
+
+        if klass is Enum:
+            obj = klass(name, type_name, member)
+        else:
+            obj = klass(name, type_name, members, get_type)
+            obj.ctype = ctype
         self._add_node(obj)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]