ocaml: remove fields regs_read_count, regs_write_count, groups_count, as they can be derived from the lengths of related arrays

test2
Nguyen Anh Quynh 10 years ago
parent bf23075e32
commit 6dc1dd5ae0
  1. 13
      bindings/ocaml/capstone.ml
  2. 25
      bindings/ocaml/ocaml.c
  3. 1
      bindings/ocaml/test_xcore.ml

@ -74,11 +74,8 @@ type cs_insn0 = {
mnemonic: string;
op_str: string;
regs_read: int array;
regs_read_count: int;
regs_write: int array;
regs_write_count: int;
groups: int array;
groups_count: int;
arch: cs_arch;
}
@ -92,11 +89,10 @@ external cs_version: unit -> int = "ocaml_version"
class cs_insn c a =
let csh = c in
let (id, address, size, bytes, mnemonic, op_str, regs_read, regs_read_count,
regs_write, regs_write_count, groups, groups_count, arch) =
let (id, address, size, bytes, mnemonic, op_str, regs_read,
regs_write, groups, arch) =
(a.id, a.address, a.size, a.bytes, a.mnemonic, a.op_str,
a.regs_read, a.regs_read_count, a.regs_write, a.regs_write_count,
a.groups, a.groups_count, a.arch) in
a.regs_read, a.regs_write, a.groups, a.arch) in
object
method id = id;
method address = address;
@ -105,11 +101,8 @@ class cs_insn c a =
method mnemonic = mnemonic;
method op_str = op_str;
method regs_read = regs_read;
method regs_read_count = regs_read_count;
method regs_write = regs_write;
method regs_write_count = regs_write_count;
method groups = groups;
method groups_count = groups_count;
method arch = arch;
method insn_name = cs_insn_name csh id;
end;;

@ -43,7 +43,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
unsigned int lcount, i;
cons = caml_alloc(2, 0);
rec_insn = caml_alloc(13, 0);
rec_insn = caml_alloc(10, 0);
Store_field(rec_insn, 0, Val_int(insn[j-1].id));
Store_field(rec_insn, 1, Val_int(insn[j-1].address));
Store_field(rec_insn, 2, Val_int(insn[j-1].size));
@ -72,7 +72,6 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
} else
array = Atom(0); // empty list
Store_field(rec_insn, 6, array);
Store_field(rec_insn, 7, Val_int(lcount));
lcount = (insn[j-1]).detail->regs_write_count;
if (lcount) {
@ -82,8 +81,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
}
} else
array = Atom(0); // empty list
Store_field(rec_insn, 8, array);
Store_field(rec_insn, 9, Val_int(lcount));
Store_field(rec_insn, 7, array);
lcount = (insn[j-1]).detail->groups_count;
@ -94,8 +92,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
}
} else
array = Atom(0); // empty list
Store_field(rec_insn, 10, array);
Store_field(rec_insn, 11, Val_int(lcount));
Store_field(rec_insn, 8, array);
if(insn[j-1].detail) {
switch(arch) {
@ -170,7 +167,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
case CS_ARCH_ARM64:
@ -258,7 +255,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
case CS_ARCH_MIPS:
@ -300,7 +297,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
case CS_ARCH_X86:
@ -396,7 +393,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
case CS_ARCH_PPC:
@ -442,7 +439,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
@ -489,7 +486,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
@ -540,7 +537,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;
@ -585,7 +582,7 @@ CAMLprim value _cs_disasm(cs_arch arch, csh handle, const uint8_t * code, size_t
// finally, insert this into arch_info
Store_field(arch_info, 0, op_info_val);
Store_field(rec_insn, 12, arch_info);
Store_field(rec_insn, 9, arch_info);
break;

@ -51,7 +51,6 @@ let print_detail csh arch =
| CS_INFO_SYSZ _ -> ();
| CS_INFO_XCORE xcore -> (
printf "\top_count: %d\n" (Array.length xcore.operands);
(* print all operands info (type & value) *)
if (Array.length xcore.operands) > 0 then (
printf "\top_count: %d\n" (Array.length xcore.operands);

Loading…
Cancel
Save