diff options
Diffstat (limited to 'cli')
24 files changed, 84 insertions, 30 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index 6a436c318..d42136f84 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -2824,6 +2824,30 @@ itest!(unstable_ffi_15 { exit_code: 70, }); +itest!(unstable_ffi_16 { + args: "run run/ffi/unstable_ffi_16.js", + output: "run/ffi/unstable_ffi_16.js.out", + exit_code: 70, +}); + +itest!(unstable_ffi_17 { + args: "run run/ffi/unstable_ffi_17.js", + output: "run/ffi/unstable_ffi_17.js.out", + exit_code: 70, +}); + +itest!(unstable_ffi_18 { + args: "run run/ffi/unstable_ffi_18.js", + output: "run/ffi/unstable_ffi_18.js.out", + exit_code: 70, +}); + +itest!(unstable_ffi_19 { + args: "run run/ffi/unstable_ffi_19.js", + output: "run/ffi/unstable_ffi_19.js.out", + exit_code: 70, +}); + itest!(future_check2 { args: "run --check run/future_check.ts", output: "run/future_check2.out", diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_10.js b/cli/tests/testdata/run/ffi/unstable_ffi_10.js index da1c5b3a2..d291c6bbc 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_10.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_10.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_i16(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_i16(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_11.js b/cli/tests/testdata/run/ffi/unstable_ffi_11.js index c2d9213b4..fc00fac38 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_11.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_11.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_u32(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_u32(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_12.js b/cli/tests/testdata/run/ffi/unstable_ffi_12.js index d3aaa7a71..6f085115d 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_12.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_12.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_i32(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_i32(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_13.js b/cli/tests/testdata/run/ffi/unstable_ffi_13.js index 859fbad60..c3b5105db 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_13.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_13.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_u64(0n, 0, new Uint32Array(2)); +Deno[Deno.internal].core.ops.op_ffi_read_u64(null, 0, new Uint32Array(2)); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_14.js b/cli/tests/testdata/run/ffi/unstable_ffi_14.js index 19f8a48c8..2d095c5d6 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_14.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_14.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_f32(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_f32(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_15.js b/cli/tests/testdata/run/ffi/unstable_ffi_15.js index 3a4c0252b..a3cf2b0c5 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_15.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_15.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_f64(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_f64(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_16.js b/cli/tests/testdata/run/ffi/unstable_ffi_16.js new file mode 100644 index 000000000..2bf3759b3 --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_16.js @@ -0,0 +1 @@ +Deno[Deno.internal].core.ops.op_ffi_ptr_value(null, new Uint32Array(2)); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_16.js.out b/cli/tests/testdata/run/ffi/unstable_ffi_16.js.out new file mode 100644 index 000000000..d68870784 --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_16.js.out @@ -0,0 +1 @@ +Unstable API 'Deno.UnsafePointer#value'. The --unstable flag must be provided. diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_17.js b/cli/tests/testdata/run/ffi/unstable_ffi_17.js new file mode 100644 index 000000000..595727092 --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_17.js @@ -0,0 +1 @@ +Deno[Deno.internal].core.ops.op_ffi_get_buf(null, 0, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_17.js.out b/cli/tests/testdata/run/ffi/unstable_ffi_17.js.out new file mode 100644 index 000000000..294931243 --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_17.js.out @@ -0,0 +1 @@ +Unstable API 'Deno.UnsafePointerView#getArrayBuffer'. The --unstable flag must be provided. diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_18.js b/cli/tests/testdata/run/ffi/unstable_ffi_18.js new file mode 100644 index 000000000..d222a7b7d --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_18.js @@ -0,0 +1 @@ +Deno[Deno.internal].core.ops.op_ffi_ptr_create(null); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_18.js.out b/cli/tests/testdata/run/ffi/unstable_ffi_18.js.out new file mode 100644 index 000000000..6f7ea0d8f --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_18.js.out @@ -0,0 +1 @@ +Unstable API 'Deno.UnsafePointer#create'. The --unstable flag must be provided. diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_19.js b/cli/tests/testdata/run/ffi/unstable_ffi_19.js new file mode 100644 index 000000000..97d650022 --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_19.js @@ -0,0 +1 @@ +Deno[Deno.internal].core.ops.op_ffi_ptr_equals(null, null); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_19.js.out b/cli/tests/testdata/run/ffi/unstable_ffi_19.js.out new file mode 100644 index 000000000..15a99b9ab --- /dev/null +++ b/cli/tests/testdata/run/ffi/unstable_ffi_19.js.out @@ -0,0 +1 @@ +Unstable API 'Deno.UnsafePointer#equals'. The --unstable flag must be provided. diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_2.js b/cli/tests/testdata/run/ffi/unstable_ffi_2.js index 4ed91a9c2..c99b1e586 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_2.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_2.js @@ -1,4 +1,4 @@ -Deno[Deno.internal].core.ops.op_ffi_call_ptr(0n, { +Deno[Deno.internal].core.ops.op_ffi_call_ptr(null, { name: null, parameters: [], result: "void", diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_3.js b/cli/tests/testdata/run/ffi/unstable_ffi_3.js index 284ecbc91..b59a264ea 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_3.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_3.js @@ -1,4 +1,4 @@ -Deno[Deno.internal].core.opAsync("op_ffi_call_ptr_nonblocking", 0n, { +Deno[Deno.internal].core.opAsync("op_ffi_call_ptr_nonblocking", null, { name: null, parameters: [], result: "void", diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_5.js b/cli/tests/testdata/run/ffi/unstable_ffi_5.js index 278c3c9d2..416c78175 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_5.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_5.js @@ -1 +1,6 @@ -Deno[Deno.internal].core.ops.op_ffi_buf_copy_into(0n, 0, new Uint8Array(0), 0); +Deno[Deno.internal].core.ops.op_ffi_buf_copy_into( + null, + 0, + new Uint8Array(0), + 0, +); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_6.js b/cli/tests/testdata/run/ffi/unstable_ffi_6.js index e6add70d6..7a079f5fb 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_6.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_6.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_cstr_read(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_cstr_read(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_7.js b/cli/tests/testdata/run/ffi/unstable_ffi_7.js index 6ba28b3e3..1f9e5f0c0 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_7.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_7.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_u8(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_u8(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_8.js b/cli/tests/testdata/run/ffi/unstable_ffi_8.js index 2b0e0343b..cbd0ec9ec 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_8.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_8.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_i8(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_i8(null, 0); diff --git a/cli/tests/testdata/run/ffi/unstable_ffi_9.js b/cli/tests/testdata/run/ffi/unstable_ffi_9.js index 729a8584e..9e8da12db 100644 --- a/cli/tests/testdata/run/ffi/unstable_ffi_9.js +++ b/cli/tests/testdata/run/ffi/unstable_ffi_9.js @@ -1 +1 @@ -Deno[Deno.internal].core.ops.op_ffi_read_u16(0n, 0); +Deno[Deno.internal].core.ops.op_ffi_read_u16(null, 0); diff --git a/cli/tests/unit/ffi_test.ts b/cli/tests/unit/ffi_test.ts index 690b37afc..65b257774 100644 --- a/cli/tests/unit/ffi_test.ts +++ b/cli/tests/unit/ffi_test.ts @@ -29,7 +29,8 @@ Deno.test({ permissions: { ffi: false } }, function ffiPermissionDenied() { Deno.dlopen("/usr/lib/libc.so.6", {}); }, Deno.errors.PermissionDenied); const fnptr = new Deno.UnsafeFnPointer( - 0n, + // @ts-expect-error: Not NonNullable but null check is after premissions check. + null, { parameters: ["u32", "pointer"], result: "void", @@ -41,7 +42,10 @@ Deno.test({ permissions: { ffi: false } }, function ffiPermissionDenied() { assertThrows(() => { Deno.UnsafePointer.of(new Uint8Array(0)); }, Deno.errors.PermissionDenied); - const ptrView = new Deno.UnsafePointerView(0n); + const ptrView = new Deno.UnsafePointerView( + // @ts-expect-error: Not NonNullable but null check is after premissions check. + null, + ); assertThrows(() => { ptrView.copyInto(new Uint8Array(0)); }, Deno.errors.PermissionDenied); diff --git a/cli/tsc/dts/lib.deno.unstable.d.ts b/cli/tsc/dts/lib.deno.unstable.d.ts index 0362b416d..a1584701f 100644 --- a/cli/tsc/dts/lib.deno.unstable.d.ts +++ b/cli/tsc/dts/lib.deno.unstable.d.ts @@ -131,10 +131,10 @@ declare namespace Deno { */ type ToNativeTypeMap = & Record<NativeNumberType, number> - & Record<NativeBigIntType, PointerValue> + & Record<NativeBigIntType, number | bigint> & Record<NativeBooleanType, boolean> - & Record<NativePointerType, PointerValue | null> - & Record<NativeFunctionType, PointerValue | null> + & Record<NativePointerType, PointerValue> + & Record<NativeFunctionType, PointerValue> & Record<NativeBufferType, BufferSource | null>; /** **UNSTABLE**: New API, yet to be vetted. @@ -191,7 +191,7 @@ declare namespace Deno { */ type FromNativeTypeMap = & Record<NativeNumberType, number> - & Record<NativeBigIntType, PointerValue> + & Record<NativeBigIntType, number | bigint> & Record<NativeBooleanType, boolean> & Record<NativePointerType, PointerValue> & Record<NativeBufferType, PointerValue> @@ -340,6 +340,9 @@ declare namespace Deno { [K in keyof T]: StaticForeignSymbol<T[K]>; }; + const brand: unique symbol; + type PointerObject = { [brand]: unknown }; + /** **UNSTABLE**: New API, yet to be vetted. * * Pointer type depends on the architecture and actual pointer value. @@ -350,7 +353,7 @@ declare namespace Deno { * * @category FFI */ - export type PointerValue = number | bigint; + export type PointerValue = null | PointerObject; /** **UNSTABLE**: New API, yet to be vetted. * @@ -360,8 +363,16 @@ declare namespace Deno { * @category FFI */ export class UnsafePointer { + /** Create a pointer from a numeric value. This is one is <i>really</i> dangerous! */ + static create(value: number | bigint): PointerValue; + /** Returns `true` if the two pointers point to the same address. */ + static equals(a: PointerValue, b: PointerValue): boolean; /** Return the direct memory pointer to the typed array in memory. */ static of(value: Deno.UnsafeCallback | BufferSource): PointerValue; + /** Return a new pointer offset from the original by `offset` bytes. */ + static offset(value: NonNullable<PointerValue>, offset: number): PointerValue + /** Get the numeric value of a pointer */ + static value(value: PointerValue): number | bigint; } /** **UNSTABLE**: New API, yet to be vetted. @@ -374,9 +385,9 @@ declare namespace Deno { * @category FFI */ export class UnsafePointerView { - constructor(pointer: PointerValue); + constructor(pointer: NonNullable<PointerValue>); - pointer: PointerValue; + pointer: NonNullable<PointerValue>; /** Gets a boolean at the specified byte offset from the pointer. */ getBool(offset?: number): boolean; @@ -400,29 +411,31 @@ declare namespace Deno { getInt32(offset?: number): number; /** Gets an unsigned 64-bit integer at the specified byte offset from the * pointer. */ - getBigUint64(offset?: number): PointerValue; + getBigUint64(offset?: number): number | bigint; /** Gets a signed 64-bit integer at the specified byte offset from the * pointer. */ - getBigInt64(offset?: number): PointerValue; + getBigInt64(offset?: number): number | bigint; /** Gets a signed 32-bit float at the specified byte offset from the * pointer. */ getFloat32(offset?: number): number; /** Gets a signed 64-bit float at the specified byte offset from the * pointer. */ getFloat64(offset?: number): number; + /** Gets a pointer at the specified byte offset from the pointer */ + getPointer(offset?: number): PointerValue; /** Gets a C string (`null` terminated string) at the specified byte offset * from the pointer. */ getCString(offset?: number): string; /** Gets a C string (`null` terminated string) at the specified byte offset * from the specified pointer. */ - static getCString(pointer: PointerValue, offset?: number): string; + static getCString(pointer: NonNullable<PointerValue>, offset?: number): string; /** Gets an `ArrayBuffer` of length `byteLength` at the specified byte * offset from the pointer. */ getArrayBuffer(byteLength: number, offset?: number): ArrayBuffer; /** Gets an `ArrayBuffer` of length `byteLength` at the specified byte * offset from the specified pointer. */ static getArrayBuffer( - pointer: PointerValue, + pointer: NonNullable<PointerValue>, byteLength: number, offset?: number, ): ArrayBuffer; @@ -438,7 +451,7 @@ declare namespace Deno { * * Also takes optional byte offset from the pointer. */ static copyInto( - pointer: PointerValue, + pointer: NonNullable<PointerValue>, destination: BufferSource, offset?: number, ): void; @@ -453,11 +466,11 @@ declare namespace Deno { */ export class UnsafeFnPointer<Fn extends ForeignFunction> { /** The pointer to the function. */ - pointer: PointerValue; + pointer: NonNullable<PointerValue>; /** The definition of the function. */ definition: Fn; - constructor(pointer: PointerValue, definition: Const<Fn>); + constructor(pointer: NonNullable<PointerValue>, definition: Const<Fn>); /** Call the foreign function. */ call: FromForeignFunction<Fn>; @@ -516,7 +529,7 @@ declare namespace Deno { ); /** The pointer to the unsafe callback. */ - pointer: PointerValue; + pointer: NonNullable<PointerValue>; /** The definition of the unsafe callback. */ definition: Definition; /** The callback function. */ |