From 768d28986453ad886b5a0f458fe0a665f88a5873 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 7 Nov 2019 20:47:45 +0200 Subject: [PATCH 1/7] Fix TypedArray.wrap definition --- std/assembly/index.d.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index a841c2fde6..309e457ab0 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1215,13 +1215,15 @@ interface ArrayBufferView { readonly byteLength: i32; } +declare type InstanceType any> = T extends new (...args: any) => infer R ? R : any; + /* @internal */ -declare abstract class TypedArray implements ArrayBufferView { +declare class TypedArray implements ArrayBufferView { [key: number]: T; /** Number of bytes per element. */ static readonly BYTES_PER_ELEMENT: usize; /** Wrap an ArrayBuffer */ - static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): ArrayBufferView; + static wrap(this: U, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): InstanceType; /** Constructs a new typed array. */ constructor(length: i32); /** The {@link ArrayBuffer} referenced by this view. */ From 5b0d9c1a0bf387309c3023952b5cbee597bcfcd5 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 7 Nov 2019 21:01:34 +0200 Subject: [PATCH 2/7] simplify --- std/assembly/index.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 309e457ab0..cf9078e211 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1215,7 +1215,7 @@ interface ArrayBufferView { readonly byteLength: i32; } -declare type InstanceType any> = T extends new (...args: any) => infer R ? R : any; +declare type Constructor = new (...args: any) => T; /* @internal */ declare class TypedArray implements ArrayBufferView { @@ -1223,7 +1223,7 @@ declare class TypedArray implements ArrayBufferView { /** Number of bytes per element. */ static readonly BYTES_PER_ELEMENT: usize; /** Wrap an ArrayBuffer */ - static wrap(this: U, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): InstanceType; + static wrap>(this: Constructor, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): T; /** Constructs a new typed array. */ constructor(length: i32); /** The {@link ArrayBuffer} referenced by this view. */ From 66b7ef9502162802fc9ff33e6c25811b2615ed77 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 7 Nov 2019 21:04:06 +0200 Subject: [PATCH 3/7] revert abstract --- std/assembly/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index cf9078e211..b6c1974c9d 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1218,7 +1218,7 @@ interface ArrayBufferView { declare type Constructor = new (...args: any) => T; /* @internal */ -declare class TypedArray implements ArrayBufferView { +declare abstract class TypedArray implements ArrayBufferView { [key: number]: T; /** Number of bytes per element. */ static readonly BYTES_PER_ELEMENT: usize; From 4df6489dfd345d2ba1f14285a6c050d3a918b596 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 7 Nov 2019 21:06:05 +0200 Subject: [PATCH 4/7] minor fix --- std/assembly/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index b6c1974c9d..fa37e7ec84 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1215,7 +1215,7 @@ interface ArrayBufferView { readonly byteLength: i32; } -declare type Constructor = new (...args: any) => T; +declare type Constructor = new (...args: any[]) => T; /* @internal */ declare abstract class TypedArray implements ArrayBufferView { From 144005dcdbc53101c5a4735c865effe124f17991 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 7 Nov 2019 21:56:29 +0200 Subject: [PATCH 5/7] update approach --- std/assembly/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index fa37e7ec84..f70c086fa8 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1223,7 +1223,7 @@ declare abstract class TypedArray implements ArrayBufferView { /** Number of bytes per element. */ static readonly BYTES_PER_ELEMENT: usize; /** Wrap an ArrayBuffer */ - static wrap>(this: Constructor, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): T; + static wrap<_T = TypedArray>(this: Constructor<_T>, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): _T; /** Constructs a new typed array. */ constructor(length: i32); /** The {@link ArrayBuffer} referenced by this view. */ From 56c9976fb089e8576a83d014669ddbf06709b72f Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 16 Nov 2019 16:08:41 +0200 Subject: [PATCH 6/7] move wrap definition for subclasses --- std/assembly/index.d.ts | 57 +++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 67a7aa1e84..abbad9580c 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1250,8 +1250,6 @@ declare abstract class TypedArray implements ArrayBufferView { [key: number]: T; /** Number of bytes per element. */ static readonly BYTES_PER_ELEMENT: usize; - /** Wrap an ArrayBuffer */ - static wrap<_T = TypedArray>(this: Constructor<_T>, buffer: ArrayBuffer, byteOffset?: i32, length?: i32): _T; /** Constructs a new typed array. */ constructor(length: i32); /** The {@link ArrayBuffer} referenced by this view. */ @@ -1303,27 +1301,60 @@ declare abstract class TypedArray implements ArrayBufferView { } /** An array of twos-complement 8-bit signed integers. */ -declare class Int8Array extends TypedArray {} +declare class Int8Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Int8Array; +} /** An array of 8-bit unsigned integers. */ -declare class Uint8Array extends TypedArray {} +declare class Uint8Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Uint8Array; +} /** A clamped array of 8-bit unsigned integers. */ -declare class Uint8ClampedArray extends TypedArray {} +declare class Uint8ClampedArray extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Uint8ClampedArray; +} /** An array of twos-complement 16-bit signed integers. */ -declare class Int16Array extends TypedArray {} +declare class Int16Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Int16Array; +} /** An array of 16-bit unsigned integers. */ -declare class Uint16Array extends TypedArray {} +declare class Uint16Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Uint16Array; +} /** An array of twos-complement 32-bit signed integers. */ -declare class Int32Array extends TypedArray {} +declare class Int32Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Int32Array; +} /** An array of 32-bit unsigned integers. */ -declare class Uint32Array extends TypedArray {} +declare class Uint32Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Uint32Array; +} /** An array of twos-complement 64-bit signed integers. */ -declare class Int64Array extends TypedArray {} +declare class Int64Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Int64Array; +} /** An array of 64-bit unsigned integers. */ -declare class Uint64Array extends TypedArray {} +declare class Uint64Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Uint64Array; +} /** An array of 32-bit floating point numbers. */ -declare class Float32Array extends TypedArray {} +declare class Float32Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Float32Array; +} /** An array of 64-bit floating point numbers. */ -declare class Float64Array extends TypedArray {} +declare class Float64Array extends TypedArray { + /** Wrap an ArrayBuffer */ + static wrap(buffer: ArrayBuffer, byteOffset?: i32, length?: i32): Float64Array; +} /** Class representing a sequence of values of type `T`. */ declare class Array { From b1bd3741c28861769b71f93c07f16a2af5aa0ab1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 16 Nov 2019 16:10:16 +0200 Subject: [PATCH 7/7] cleanups --- std/assembly/index.d.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index abbad9580c..12a5c09127 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1243,8 +1243,6 @@ interface ArrayBufferView { readonly byteLength: i32; } -declare type Constructor = new (...args: any[]) => T; - /* @internal */ declare abstract class TypedArray implements ArrayBufferView { [key: number]: T;