[gobject-introspection] ast: Track enum/bitfield member parents



commit f027b6841164fc5c712236b3c40a90808e1b7428
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Jan 30 10:02:41 2013 -0500

    ast: Track enum/bitfield member parents
    
    We need this for the doctool so that we can link to an enum
    definition when we reference one of the member values.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=693040

 giscanner/ast.py       |    5 +++++
 giscanner/girparser.py |    6 ++++--
 2 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/giscanner/ast.py b/giscanner/ast.py
index 7076a84..50b0f29 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -770,6 +770,8 @@ class Enum(Node, Registered):
         self.c_symbol_prefix = c_symbol_prefix
         self.ctype = ctype
         self.members = members
+        for member in members:
+            member.parent = self
         # Associated error domain name
         self.error_domain = None
         self.static_methods = []
@@ -791,6 +793,8 @@ class Bitfield(Node, Registered):
         self.ctype = ctype
         self.c_symbol_prefix = c_symbol_prefix
         self.members = members
+        for member in members:
+            member.parent = self
         self.static_methods = []
 
     def _walk(self, callback, chain):
@@ -806,6 +810,7 @@ class Member(Annotated):
         self.value = value
         self.symbol = symbol
         self.nick = nick
+        self.parent = None
 
     def __cmp__(self, other):
         return cmp(self.name, other.name)
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index ef915a7..ea8b0d6 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -581,8 +581,10 @@ class GIRParser(object):
             self._namespace.append(obj)
             return
 
-        for member in self._find_children(node, _corens('member')):
-            members.append(self._parse_member(member))
+        for member_node in self._find_children(node, _corens('member')):
+            member = self._parse_member(member_node)
+            member.parent = obj
+            members.append(member)
         for func_node in self._find_children(node, _corens('function')):
             func = self._parse_function_common(func_node, ast.Function)
             obj.static_methods.append(func)



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