summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/integration/run_tests.rs24
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_10.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_11.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_12.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_13.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_14.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_15.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_16.js1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_16.js.out1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_17.js1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_17.js.out1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_18.js1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_18.js.out1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_19.js1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_19.js.out1
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_2.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_3.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_5.js7
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_6.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_7.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_8.js2
-rw-r--r--cli/tests/testdata/run/ffi/unstable_ffi_9.js2
-rw-r--r--cli/tests/unit/ffi_test.ts8
-rw-r--r--cli/tsc/dts/lib.deno.unstable.d.ts43
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. */