94
|
1 from .errors import CompilerException
|
|
2 import struct
|
|
3
|
|
4 def bits(f):
|
|
5 while True:
|
|
6 Byte = f.read(1)
|
|
7 for i in range(8):
|
|
8 yield Byte & 0x1
|
|
9 Byte >>= 1
|
|
10
|
|
11 class BitReader:
|
|
12 def __init__(self, f):
|
|
13 self.stream = bits(f)
|
|
14 self.curword = None
|
|
15 def parseModule(self):
|
|
16 if self.read(8) != ord('B') or self.read(8) != ord('C'):
|
|
17 raise CompilerException('Invalid bitcode signature')
|
|
18 for bitsig in [0x0, 0xC, 0xE, 0xD]:
|
|
19 if self.read(4) != bitsig:
|
|
20 raise CompilerException('Invalid bitcode signature')
|
|
21
|
|
22 def read(self, numbits):
|
|
23 if numbits == 8:
|
|
24 b = self.stream.read(1)
|
|
25 print(b)
|
|
26 return int(b[0])
|
|
27 return 2
|
|
28
|