Merge lp:~alberto.ruiz/giraffe/gdn-improvements into lp:giraffe

Proposed by Alberto Ruiz
Status: Needs review
Proposed branch: lp:~alberto.ruiz/giraffe/gdn-improvements
Merge into: lp:giraffe
Diff against target: 74 lines (+27/-4)
1 file modified
giraffe/ast.py (+27/-4)
To merge this branch: bzr merge lp:~alberto.ruiz/giraffe/gdn-improvements
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen Pending
Review via email: mp+92641@code.launchpad.net

Description of the change

I've added support for interface prerequisites

To post a comment you must log in.
62. By Alberto Ruiz

Enumeration and Record did not initialized the parent class Type, instead they were initializing Node

Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

Looks great - did you leave this in on purpose? :

62 + print name

Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

70 + if prereq_node not in iface_node._prerequisites:
71 + iface_node._prerequisites.append (prereq_node)

Looks like this code should use iface_node.register_prereq()? (and maybe fold the existence check into register_prereq() or make _prerequisites a set() instead of a list?)

Revision history for this message
Alberto Ruiz (alberto.ruiz) wrote :

> Looks great - did you leave this in on purpose? :
>
> 62 + print name

Oops, no I didn't :-)

Unmerged revisions

62. By Alberto Ruiz

Enumeration and Record did not initialized the parent class Type, instead they were initializing Node

61. By Alberto Ruiz

Added support for Interface prerequisites

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'giraffe/ast.py'
2--- giraffe/ast.py 2011-09-07 10:04:29 +0000
3+++ giraffe/ast.py 2012-02-12 07:48:19 +0000
4@@ -1,5 +1,5 @@
5 # -*- coding: utf-8 -*-
6-# vim:set shiftwidth=4 tabstop=4 noexpandtab:
7+# vim: tabstop=4 noexpandtab shiftwidth=4 softtabstop=4
8
9 import sys
10 import logging
11@@ -384,7 +384,7 @@
12
13 class Enumeration (Type):
14 def __init__ (self, element, parent):
15- Node.__init__ (self, element, parent)
16+ Type.__init__ (self, element, parent)
17
18 self._members = []
19 members = element.findall (GIR.member)
20@@ -402,7 +402,7 @@
21
22 class Record (Type) :
23 def __init__ (self, element, parent):
24- Node.__init__ (self, element, parent)
25+ Type.__init__ (self, element, parent)
26
27 self._fields = {}
28 fields = element.findall (GIR.field)
29@@ -531,6 +531,8 @@
30 def __init__ (self, element, parent):
31 Class.__init__ (self, element, parent)
32 self._implementations = set()
33+
34+ self._prerequisites = []
35
36 @property
37 def implementations (self):
38@@ -540,7 +542,16 @@
39 if not isinstance (klass, Class):
40 raise TypeError, "Expected giraffe.ast.Class found %s" % klass.__class__
41 self._implementations.add (klass)
42-
43+
44+ @property
45+ def prerequisites (self):
46+ return self._prerequisites
47+
48+ def register_prerequisite (self, prereq):
49+ if not isinstance (prereq, Record):
50+ raise TypeError, "Expected giraffe.ast.Record found %s" % prereq.__class__
51+ self._prerequisites.append(prereq)
52+
53 @property
54 def is_abstract (self):
55 return True
56@@ -784,6 +795,18 @@
57 iface_node = self[name]
58 cl.implement_interface (iface_node)
59 iface_node.register_implementation (cl)
60+ for prereq in iface_node._element.findall(GIR["prerequisite"]):
61+ name = prereq.attrib["name"]
62+ print name
63+ if not "." in name:
64+ name = "%s.%s" % (ns.name, name)
65+ if not name in self:
66+ logging.warning("Unresolved prerequisite %s for interface %s" % (name, iface.namespaced_name))
67+ continue
68+
69+ prereq_node = self[name]
70+ if prereq_node not in iface_node._prerequisites:
71+ iface_node._prerequisites.append (prereq_node)
72
73 if "parent" in cl._attribs:
74 # Make sure we have the namespace name of the iface

Subscribers

People subscribed via source and target branches