| 246 | return Type(self.read_uleb()) |
| 247 | |
| 248 | def read_init(self): |
| 249 | code = [] |
| 250 | while 1: |
| 251 | opcode = OpCode(self.read_byte()) |
| 252 | args = [] |
| 253 | match opcode: |
| 254 | case OpCode.GLOBAL_GET: |
| 255 | args.append(self.read_uleb()) |
| 256 | case OpCode.I32_CONST | OpCode.I64_CONST: |
| 257 | args.append(self.read_sleb()) |
| 258 | case OpCode.REF_NULL: |
| 259 | args.append(self.read_type()) |
| 260 | case OpCode.END | OpCode.I32_ADD | OpCode.I64_ADD: |
| 261 | pass |
| 262 | case _: |
| 263 | raise Exception('unexpected opcode %s' % opcode) |
| 264 | code.append((opcode, args)) |
| 265 | if opcode == OpCode.END: |
| 266 | break |
| 267 | return code |
| 268 | |
| 269 | def seek(self, offset): |
| 270 | return self.buf.seek(offset) |