1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

fix(ext/ffi): Use BufferSource for FFI buffer types (#16355)

Potential fix for type-code mismatch in FFI buffer types. The code
supports ArrayBuffers, but types only reflect TypedArray support.

There's also an existing type for this sort of stuff: `BufferSource`.
(Although, it uses `ArrayBufferView` which doesn't actually connect with
the TypedArray interfaces specifically, but it's just a type inheritance
difference and nothing more.)
This commit is contained in:
Aapo Alasuutari 2022-10-21 06:46:57 +03:00 committed by GitHub
parent c007657cfd
commit 16a6b86122
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 38 deletions

View file

@ -480,7 +480,7 @@ declare namespace Deno {
& Record<NativeBooleanType, boolean> & Record<NativeBooleanType, boolean>
& Record<NativePointerType, PointerValue | null> & Record<NativePointerType, PointerValue | null>
& Record<NativeFunctionType, PointerValue | null> & Record<NativeFunctionType, PointerValue | null>
& Record<NativeBufferType, TypedArray | null>; & Record<NativeBufferType, BufferSource | null>;
/** **UNSTABLE**: New API, yet to be vetted. /** **UNSTABLE**: New API, yet to be vetted.
* *
@ -660,23 +660,6 @@ declare namespace Deno {
[K in keyof T]: StaticForeignSymbol<T[K]>; [K in keyof T]: StaticForeignSymbol<T[K]>;
}; };
/** **UNSTABLE**: New API, yet to be vetted.
*
* @category FFI
*/
type TypedArray =
| Int8Array
| Uint8Array
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Uint8ClampedArray
| Float32Array
| Float64Array
| BigInt64Array
| BigUint64Array;
/** **UNSTABLE**: New API, yet to be vetted. /** **UNSTABLE**: New API, yet to be vetted.
* *
* Pointer type depends on the architecture and actual pointer value. * Pointer type depends on the architecture and actual pointer value.
@ -700,7 +683,7 @@ declare namespace Deno {
/** /**
* Return the direct memory pointer to the typed array in memory * Return the direct memory pointer to the typed array in memory
*/ */
static of(value: Deno.UnsafeCallback | TypedArray): PointerValue; static of(value: Deno.UnsafeCallback | BufferSource): PointerValue;
} }
/** **UNSTABLE**: New API, yet to be vetted. /** **UNSTABLE**: New API, yet to be vetted.
@ -752,11 +735,11 @@ declare namespace Deno {
offset?: number, offset?: number,
): ArrayBuffer; ): ArrayBuffer;
/** Copies the memory of the pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */ /** Copies the memory of the pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */
copyInto(destination: TypedArray, offset?: number): void; copyInto(destination: BufferSource, offset?: number): void;
/** Copies the memory of the specified pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */ /** Copies the memory of the specified pointer into a typed array. Length is determined from the typed array's `byteLength`. Also takes optional byte offset from the pointer. */
static copyInto( static copyInto(
pointer: PointerValue, pointer: PointerValue,
destination: TypedArray, destination: BufferSource,
offset?: number, offset?: number,
): void; ): void;
} }

View file

@ -157,12 +157,12 @@ result2.then((_1: Deno.PointerValue) => {});
const result3 = remote.symbols.method18(); const result3 = remote.symbols.method18();
// @ts-expect-error: Invalid argument // @ts-expect-error: Invalid argument
let r3_0: Deno.TypedArray = result3; let r3_0: Deno.BufferSource = result3;
let r3_1: Deno.UnsafePointer = result3; let r3_1: Deno.UnsafePointer = result3;
const result4 = remote.symbols.method19(); const result4 = remote.symbols.method19();
// @ts-expect-error: Invalid argument // @ts-expect-error: Invalid argument
result4.then((_0: Deno.TypedArray) => {}); result4.then((_0: Deno.BufferSource) => {});
result4.then((_1: Deno.UnsafePointer) => {}); result4.then((_1: Deno.UnsafePointer) => {});
const fnptr = new Deno.UnsafeFnPointer( const fnptr = new Deno.UnsafeFnPointer(
@ -345,19 +345,6 @@ type AssertNotEqual<
$ = [Equal<Expected, Got>] extends [true] ? never : Expected, $ = [Equal<Expected, Got>] extends [true] ? never : Expected,
> = never; > = never;
type TypedArray =
| Int8Array
| Uint8Array
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Uint8ClampedArray
| Float32Array
| Float64Array
| BigInt64Array
| BigUint64Array;
type __Tests__ = [ type __Tests__ = [
empty: AssertEqual< empty: AssertEqual<
{ symbols: Record<never, never>; close(): void }, { symbols: Record<never, never>; close(): void },
@ -371,7 +358,7 @@ type __Tests__ = [
{ {
symbols: { symbols: {
pushBuf: ( pushBuf: (
buf: TypedArray | null, buf: BufferSource | null,
ptr: Deno.PointerValue | null, ptr: Deno.PointerValue | null,
func: Deno.PointerValue | null, func: Deno.PointerValue | null,
) => void; ) => void;
@ -391,7 +378,7 @@ type __Tests__ = [
{ {
symbols: { symbols: {
pushBuf: ( pushBuf: (
buf: TypedArray | null, buf: BufferSource | null,
ptr: Deno.PointerValue | null, ptr: Deno.PointerValue | null,
func: Deno.PointerValue | null, func: Deno.PointerValue | null,
) => Deno.PointerValue; ) => Deno.PointerValue;