comparison python/ir/function.py @ 268:5ec7580976d9

Op naar tree-IR
author Windel Bouwman
date Wed, 14 Aug 2013 20:12:40 +0200
parents 225f444019b1
children 5f8c04a8d26b
comparison
equal deleted inserted replaced
267:e7c8f7eb3f59 268:5ec7580976d9
1 from .basicblock import BasicBlock 1 from .basicblock import Block
2 2
3 class Function: 3 class Function:
4 def __init__(self, name): 4 def __init__(self, name):
5 self.name = name 5 self.name = name
6 self.bbs = [] 6 self.entry = Block('entry')
7 self.entry = None
8 7
9 def __repr__(self): 8 def __repr__(self):
10 return 'Function {0}'.format(self.name) 9 return 'Function {0}'.format(self.name)
11 10
12 def addBB(self, bb): 11 def addBB(self, bb):
17 def removeBasicBlock(self, bb): 16 def removeBasicBlock(self, bb):
18 self.bbs.remove(bb) 17 self.bbs.remove(bb)
19 bb.parent = None 18 bb.parent = None
20 19
21 def getBBs(self): 20 def getBBs(self):
22 return self.bbs 21 bbs = [self.entry]
22 worklist = [self.entry]
23 while worklist:
24 b = worklist.pop()
25 for sb in b.Successors:
26 if sb not in bbs:
27 bbs.append(sb)
28 worklist.append(sb)
29 return bbs
23 30
24 def findBasicBlock(self, name): 31 def findBasicBlock(self, name):
25 for bb in self.bbs: 32 for bb in self.bbs:
26 if bb.name == name: 33 if bb.name == name:
27 return bb 34 return bb