more FFI cleanup
This commit is contained in:
parent
b7f845300c
commit
cb550bf885
@ -609,7 +609,7 @@ FORCE_INLINE u64 i64abs(i64 x) { return x<0?-x:x; }
|
|||||||
for (usz i=0; i<ia; i++) ((UEL*)rp)[i] = tp[i]; \
|
for (usz i=0; i<ia; i++) ((UEL*)rp)[i] = tp[i]; \
|
||||||
decG(t); return r;
|
decG(t); return r;
|
||||||
|
|
||||||
// copy elements of x as unsigned integers (using a signed integer array type as a "container"); consumes argument
|
// copy elements of x to array of unsigned integers (using a signed integer array type as a "container"); consumes argument
|
||||||
// undefined behavior if x contains a number outside the respective unsigned range (incl. any negative numbers)
|
// undefined behavior if x contains a number outside the respective unsigned range (incl. any negative numbers)
|
||||||
NOINLINE B cpyU32Bits(B x) { CPY_UNSIGNED(i32, u32, cpyI32Arr, toF64Any, f64) }
|
NOINLINE B cpyU32Bits(B x) { CPY_UNSIGNED(i32, u32, cpyI32Arr, toF64Any, f64) }
|
||||||
NOINLINE B cpyU16Bits(B x) { CPY_UNSIGNED(i16, u16, cpyI16Arr, toI32Any, i32) }
|
NOINLINE B cpyU16Bits(B x) { CPY_UNSIGNED(i16, u16, cpyI16Arr, toI32Any, i32) }
|
||||||
@ -763,7 +763,7 @@ void genObj(B o, B c, bool anyMut, void* ptr) { // doesn't consume; mutates ffiO
|
|||||||
B cG = toW(reT, reW, incG(c));
|
B cG = toW(reT, reW, incG(c));
|
||||||
memcpy(ptr, tyany_ptr(cG), 8); // may over-read, but CBQN-allocations allow that; may write past the end, but that's fine too? maybe? idk actually; TODO
|
memcpy(ptr, tyany_ptr(cG), 8); // may over-read, but CBQN-allocations allow that; may write past the end, but that's fine too? maybe? idk actually; TODO
|
||||||
dec(cG);
|
dec(cG);
|
||||||
} else { // *scalar:any / &scalar:any / *:any
|
} else { // *scalar:any / &scalar:any / *:any / **:any
|
||||||
BQNFFIType* t2 = c(BQNFFIType, o2);
|
BQNFFIType* t2 = c(BQNFFIType, o2);
|
||||||
B ore = t2->a[0].o;
|
B ore = t2->a[0].o;
|
||||||
assert(t2->ty==cty_ptr && (isC32(ore) || ore.u==ty_voidptr.u));
|
assert(t2->ty==cty_ptr && (isC32(ore) || ore.u==ty_voidptr.u));
|
||||||
@ -795,7 +795,7 @@ void genObj(B o, B c, bool anyMut, void* ptr) { // doesn't consume; mutates ffiO
|
|||||||
ffiObjsGlobal = vec_addN(ffiObjsGlobal, cG);
|
ffiObjsGlobal = vec_addN(ffiObjsGlobal, cG);
|
||||||
}
|
}
|
||||||
} else if (t->ty==cty_struct || t->ty==cty_starr) {
|
} else if (t->ty==cty_struct || t->ty==cty_starr) {
|
||||||
if (!isArr(c)) thrM("FFI: Expected array corresponding to a struct");
|
if (!isArr(c)) thrF("FFI: Expected array corresponding to %R", ty_fmt(o));
|
||||||
if (IA(c)!=t->ia-1) thrF("FFI: Incorrect list length corresponding to %S: expected %s, got %s", t->ty==cty_struct? "a struct" : "an array", (usz)(t->ia-1), IA(c));
|
if (IA(c)!=t->ia-1) thrF("FFI: Incorrect list length corresponding to %S: expected %s, got %s", t->ty==cty_struct? "a struct" : "an array", (usz)(t->ia-1), IA(c));
|
||||||
SGetU(c)
|
SGetU(c)
|
||||||
for (usz i = 0; i < t->ia-1; i++) {
|
for (usz i = 0; i < t->ia-1; i++) {
|
||||||
|
|||||||
@ -138,8 +138,9 @@
|
|||||||
# wrong argument internal structure
|
# wrong argument internal structure
|
||||||
!"FFI: Expected array or pointer object corresponding to ""*[2]i32""" % f←@•FFI""‿"bqn_init"‿">*[2]i32" ⋄ F @
|
!"FFI: Expected array or pointer object corresponding to ""*[2]i32""" % f←@•FFI""‿"bqn_init"‿">*[2]i32" ⋄ F @
|
||||||
!"FFI: Expected array or pointer object corresponding to ""*{...}""" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F @
|
!"FFI: Expected array or pointer object corresponding to ""*{...}""" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F @
|
||||||
!"FFI: Expected array corresponding to a struct" % f←@•FFI""‿"bqn_init"‿">{i32}" ⋄ F @
|
!"FFI: Expected array corresponding to ""{...}""" % f←@•FFI""‿"bqn_init"‿">{i32}" ⋄ F 0
|
||||||
!"FFI: Expected array corresponding to a struct" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨@⟩
|
!"FFI: Expected array corresponding to ""{...}""" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨0⟩
|
||||||
|
!"FFI: Expected array corresponding to ""[1]i32""" % f←@•FFI""‿"bqn_init"‿">*[1]i32" ⋄ F ⟨0⟩
|
||||||
!"FFI: Incorrect list length corresponding to a struct: expected 1, got 0" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨⟨⟩⟩
|
!"FFI: Incorrect list length corresponding to a struct: expected 1, got 0" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨⟨⟩⟩
|
||||||
!"FFI: Incorrect list length corresponding to a struct: expected 1, got 2" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨1‿2⟩
|
!"FFI: Incorrect list length corresponding to a struct: expected 1, got 2" % f←@•FFI""‿"bqn_init"‿">*{i32}" ⋄ F ⟨1‿2⟩
|
||||||
!"FFI: Incorrect list length corresponding to an array: expected 2, got 0" % f←@•FFI""‿"bqn_init"‿">*[2]i32" ⋄ F ⟨⟨⟩⟩
|
!"FFI: Incorrect list length corresponding to an array: expected 2, got 0" % f←@•FFI""‿"bqn_init"‿">*[2]i32" ⋄ F ⟨⟨⟩⟩
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user