FFI: properly error on read of *a:b

This commit is contained in:
dzaima 2024-02-16 04:16:37 +02:00
parent 8d427100c2
commit 5a13b49ee6
2 changed files with 5 additions and 2 deletions

View File

@ -820,8 +820,10 @@ static u8 const reTyMapC[] = { [3]=t_c8arr, [4]=t_c16arr, [5]=t_c32arr };
static u8 const reTyMapI[] = { [3]=t_i8arr, [4]=t_i16arr, [5]=t_i32arr, [6]=t_f64arr, [0]=t_bitarr };
static B readRe(BQNFFIType* t, u8* src) {
B e = t->a[0].o;
assert(isC32(e) || e.u==ty_voidptr.u);
u8 elW = isC32(e)? sty_w[styG(e)] : sizeof(void*); // bytes
u8 elW; // bytes
if (isC32(e)) elW = sty_w[styG(e)];
else if (e.u==ty_voidptr.u) elW = sizeof(void*);
else thrF("FFI: Cannot read from %R", ty_fmt(tag(t, OBJ_TAG)));
u8 reW = t->reWidth; // log bits
B r;
char* dst = m_tyarrlbv(&r, reW, (elW*8)>>reW, (t->reType=='c'? reTyMapC : reTyMapI)[reW]);

View File

@ -196,6 +196,7 @@
!"Cannot get a field of a pointer to a scalar" % %USE WallocE {{𝕊al: ("i32" Al 99).Field 0}}
!"ptr.Write: Cannot write array to ""*i32""" % %USE WallocE {{𝕊al: ("*i32" Al 99).Write 123}}
!"ptr.Write: Cannot write array to ""*i32:i32""" % %USE WallocE {{𝕊al: ("*i32:i32"Al 99).Write 16}}
!"FFI: Cannot read from ""*i32:i32""" % %USE WallocE {{𝕊al: ("*i32:i32"Al 99).Read 0}}
%USE Walloc {{𝕊al: p("" Al 99).Cast "*:i8" a"i32"Al 99 a.Write 12345 p.Write arCpy aa0 ! ar p.Read 0 a.Read 0}} %% 12345
%USE Walloc {{𝕊al: p"i16" Al 99 raw Cpy 0˜˜p.Add 3 cpy2@•FFI"*i16""memcpy""*:i8""*:i8"size_t p.Sub Cpy2 rawraw0 }} %% ¯3