blueloveTH 2 лет назад
Родитель
Сommit
577f7b4d0e
2 измененных файлов с 36 добавлено и 3 удалено
  1. 1 3
      src/cffi.h
  2. 35 0
      tests/80_c.py

+ 1 - 3
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;
     });
 

+ 35 - 0
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)