Cleared file executable bit that was set earlier by a mistake
[cython.git] / Cython / Compiler / CodeGeneration.py
1 from Visitor import CythonTransform
2 from sets import Set as set
3
4 class AnchorTemps(CythonTransform):
5
6     def init_scope(self, scope):
7         scope.free_temp_entries = []
8
9     def handle_node(self, node):
10         if node.temps:
11             for temp in node.temps:
12                 temp.cname = self.scope.allocate_temp(temp.type)
13                 self.temps_beneath_try.add(temp.cname)
14             self.visitchildren(node)
15             for temp in node.temps:
16                 self.scope.release_temp(temp.cname)
17         else:
18             self.visitchildren(node)
19
20     def visit_Node(self, node):
21         self.handle_node(node)
22         return node
23
24     def visit_ModuleNode(self, node):
25         self.scope = node.scope
26         self.temps_beneath_try = set()
27         self.init_scope(self.scope)
28         self.handle_node(node)
29         return node
30
31     def visit_FuncDefNode(self, node):
32         pscope = self.scope
33         pscope_temps = self.temps_beneath_try
34         self.scope = node.local_scope
35         self.init_scope(node.local_scope)
36         self.handle_node(node)
37         self.scope = pscope
38         self.temps_beneath_try = pscope_temps
39         return node
40
41     def visit_TryExceptNode(self, node):
42         old_tbt = self.temps_beneath_try
43         self.temps_beneath_try = set()
44         self.handle_node(node)
45         entries = [ scope.cname_to_entry[cname] for
46                     cname in self.temps_beneath_try]
47         node.cleanup_list.extend(entries)
48         return node