File: Synopsis/Processors/Transformer.py 1
2
3
4
5
6
7
8from Synopsis import ASG
9from Synopsis.Processor import Processor
10
11class Transformer(Processor, ASG.Visitor):
12 """A class that creates a new ASG from an old one. This is a helper base for
13 more specialized classes that manipulate the ASG based on
14 the comments in the nodes"""
15
16 def __init__(self, **kwds):
17 """Constructor"""
18
19 Processor.__init__(self, **kwds)
20 self.__scopes = []
21 self.__current = []
22
23 def process(self, ir, **kwds):
24
25 self.set_parameters(kwds)
26 self.ir = self.merge_input(ir)
27
28 for decl in ir.asg.declarations:
29 decl.accept(self)
30
31 self.finalize()
32 return self.output_and_return_ir()
33
34 def finalize(self):
35 """replace the ASG with the newly created one"""
36
37 self.ir.asg.declarations[:] = self.__current
38
39 def push(self):
40 """Pushes the current scope onto the stack and starts a new one"""
41
42 self.__scopes.append(self.__current)
43 self.__current = []
44
45 def pop(self, decl):
46 """Pops the current scope from the stack, and appends the given
47 declaration to it"""
48
49 self.__current = self.__scopes.pop()
50 self.__current.append(decl)
51
52 def add(self, decl):
53 """Adds the given decl to the current scope"""
54
55 self.__current.append(decl)
56
57 def current_scope(self):
58 """Returns the current scope: a list of declarations"""
59
60 return self.__current
61
62 def visit_builtin(self, decl):
63
64 self.visit_declaration(decl)
65
Generated on Thu Apr 16 16:27:14 2009 by
synopsis (version devel)