diff --git a/src/cffi.h b/src/cffi.h index 93b39afe..244e317c 100644 --- a/src/cffi.h +++ b/src/cffi.h @@ -447,9 +447,7 @@ inline void add_module_c(VM* vm){ vm->bind_func<3>(mod, "memset", [](VM* vm, ArgsView args){ void* p = CAST(void*, args[0]); - i64 c = CAST(i64, args[1]); - i64 size = CAST(i64, args[2]); - memset(p, c, size); + memset(p, CAST(int, args[1]), CAST(size_t, args[2])); return vm->None; }); diff --git a/tests/80_c.py b/tests/80_c.py new file mode 100644 index 00000000..35e6d464 --- /dev/null +++ b/tests/80_c.py @@ -0,0 +1,35 @@ +import c + +c_int = c.refl("int") +assert c_int.size() == c.sizeof("int") +array = c.malloc(c.sizeof("int") * 10) +array.set_base_offset("int") + +assert array.get_base_offset() == c_int.size() + +for i in range(10): + array.offset(i).write_int(i) + +x = c_int() +x.addr().write_int(0) +for i in range(10): + i = array.offset(i).read_int() + x.addr().write_int( + x.addr().read_int() + i + ) + +assert x.addr().read_int() == (0+9)*10//2 + +c.memset(array, 0, c.sizeof("int") * 10) + +for i in range(10): + assert array.offset(i).read_char() == 0 + +array2 = c.malloc(c.sizeof("int") * 10) +array2.set_base_offset("int") +c.memcpy(array2, array, c.sizeof("int") * 10) +for i in range(10): + assert array2.offset(i).read_char() == 0 + +c.free(array) +c.free(array2) \ No newline at end of file