1# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>
2
3import ctypes
4from . import copy_ctypes_list
5from .mips_const import *
6
7# define the API
8class MipsOpMem(ctypes.Structure):
9    _fields_ = (
10        ('base', ctypes.c_uint),
11        ('disp', ctypes.c_int64),
12    )
13
14class MipsOpValue(ctypes.Union):
15    _fields_ = (
16        ('reg', ctypes.c_uint),
17        ('imm', ctypes.c_int64),
18        ('mem', MipsOpMem),
19    )
20
21class MipsOp(ctypes.Structure):
22    _fields_ = (
23        ('type', ctypes.c_uint),
24        ('value', MipsOpValue),
25    )
26
27    @property
28    def imm(self):
29        return self.value.imm
30
31    @property
32    def reg(self):
33        return self.value.reg
34
35    @property
36    def mem(self):
37        return self.value.mem
38
39
40class CsMips(ctypes.Structure):
41    _fields_ = (
42        ('op_count', ctypes.c_uint8),
43        ('operands', MipsOp * 8),
44    )
45
46def get_arch_info(a):
47    return copy_ctypes_list(a.operands[:a.op_count])
48
49