Mercurial > lcfOS
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 |