diff --git a/Runtime/src/index.ts b/Runtime/src/index.ts index f034e334d..0e641ffab 100644 --- a/Runtime/src/index.ts +++ b/Runtime/src/index.ts @@ -42,19 +42,6 @@ enum JavaScriptValueKind { Function = 6, } -enum JavaScriptTypedArrayKind { - Int8 = 0, - Uint8 = 1, - Int16 = 2, - Uint16 = 3, - Int32 = 4, - Uint32 = 5, - BigInt64 = 6, - BigUint64 = 7, - Float32 = 8, - Float64 = 9, -} - type TypedArray = | Int8ArrayConstructor | Uint8ArrayConstructor @@ -130,7 +117,7 @@ class SwiftRuntimeHeap { export class SwiftRuntime { private instance: WebAssembly.Instance | null; private heap: SwiftRuntimeHeap - private version: number = 600 + private version: number = 610 constructor() { this.instance = null; @@ -405,11 +392,11 @@ export class SwiftRuntime { return obj instanceof constructor }, swjs_create_typed_array: ( - kind: JavaScriptTypedArrayKind, + constructor_ref: ref, elementsPtr: pointer, length: number, result_obj: pointer ) => { - const ArrayType: TypedArray = globalVariable[JavaScriptTypedArrayKind[kind] + 'Array'] + const ArrayType: TypedArray = this.heap.referenceHeap(constructor_ref); const array = new ArrayType(memory().buffer, elementsPtr, length); // Call `.slice()` to copy the memory writeUint32(result_obj, this.heap.retain(array.slice())); diff --git a/Sources/JavaScriptKit/BasicObjects/JSTypedArray.swift b/Sources/JavaScriptKit/BasicObjects/JSTypedArray.swift index 0994708ce..b45ed907b 100644 --- a/Sources/JavaScriptKit/BasicObjects/JSTypedArray.swift +++ b/Sources/JavaScriptKit/BasicObjects/JSTypedArray.swift @@ -5,7 +5,6 @@ import _CJavaScriptKit public protocol TypedArrayElement: JSValueConvertible, JSValueConstructible { - static var typedArrayKind: JavaScriptTypedArrayKind { get } static var typedArrayClass: JSFunction { get } } @@ -46,7 +45,7 @@ public class JSTypedArray: JSValueConvertible, ExpressibleByArrayLitera public convenience init(_ array: [Element]) { var resultObj = JavaScriptObjectRef() array.withUnsafeBufferPointer { ptr in - _create_typed_array(Element.typedArrayKind, ptr.baseAddress!, Int32(array.count), &resultObj) + _create_typed_array(Element.typedArrayClass.id, ptr.baseAddress!, Int32(array.count), &resultObj) } self.init(unsafe: JSObject(id: resultObj)) } @@ -70,67 +69,49 @@ func valueForBitWidth(typeName: String, bitWidth: Int, when32: T) -> T { } extension Int: TypedArrayElement { - public static var typedArrayClass: JSFunction { + public static var typedArrayClass: JSFunction = valueForBitWidth(typeName: "Int", bitWidth: Int.bitWidth, when32: JSObject.global.Int32Array).function! - } - public static var typedArrayKind: JavaScriptTypedArrayKind { - valueForBitWidth(typeName: "Int", bitWidth: Int.bitWidth, when32: .int32) - } } extension UInt: TypedArrayElement { - public static var typedArrayClass: JSFunction { + public static var typedArrayClass: JSFunction = valueForBitWidth(typeName: "UInt", bitWidth: Int.bitWidth, when32: JSObject.global.Uint32Array).function! - } - public static var typedArrayKind: JavaScriptTypedArrayKind { - valueForBitWidth(typeName: "UInt", bitWidth: UInt.bitWidth, when32: .uint32) - } } // MARK: - Concrete TypedArray classes extension Int8: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Int8Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .int8 } + public static var typedArrayClass = JSObject.global.Int8Array.function! } extension UInt8: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Uint8Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .uint8 } + public static var typedArrayClass = JSObject.global.Uint8Array.function! } // TODO: Support Uint8ClampedArray? extension Int16: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Int16Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .int16 } + public static var typedArrayClass = JSObject.global.Int16Array.function! } extension UInt16: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Uint16Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .uint16 } + public static var typedArrayClass = JSObject.global.Uint16Array.function! } extension Int32: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Int32Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .int32 } + public static var typedArrayClass = JSObject.global.Int32Array.function! } extension UInt32: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Uint32Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .uint32 } + public static var typedArrayClass = JSObject.global.Uint32Array.function! } // FIXME: Support passing BigInts across the bridge //extension Int64: TypedArrayElement { -// public static var typedArrayClass: JSFunction { JSObject.global.BigInt64Array.function! } -// public static var type: JavaScriptTypedArrayKind { .bigInt64 } +// public static var typedArrayClass = JSObject.global.BigInt64Array.function! //} //extension UInt64: TypedArrayElement { -// public static var typedArrayClass: JSFunction { JSObject.global.BigUint64Array.function! } -// public static var type: JavaScriptTypedArrayKind { .bigUint64 } +// public static var typedArrayClass = JSObject.global.BigUint64Array.function! //} extension Float32: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Float32Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .float32 } + public static var typedArrayClass = JSObject.global.Float32Array.function! } extension Float64: TypedArrayElement { - public static var typedArrayClass: JSFunction { JSObject.global.Float64Array.function! } - public static var typedArrayKind: JavaScriptTypedArrayKind { .float64 } + public static var typedArrayClass = JSObject.global.Float64Array.function! } diff --git a/Sources/JavaScriptKit/Compatibility.swift b/Sources/JavaScriptKit/Compatibility.swift index 24952a61f..b3b13f5c8 100644 --- a/Sources/JavaScriptKit/Compatibility.swift +++ b/Sources/JavaScriptKit/Compatibility.swift @@ -1,4 +1,4 @@ @_cdecl("swjs_library_version") func _library_version() -> Double { - return 600 + return 610 } diff --git a/Sources/JavaScriptKit/XcodeSupport.swift b/Sources/JavaScriptKit/XcodeSupport.swift index ed42417c8..d9dc3b88d 100644 --- a/Sources/JavaScriptKit/XcodeSupport.swift +++ b/Sources/JavaScriptKit/XcodeSupport.swift @@ -74,7 +74,7 @@ import _CJavaScriptKit ) { fatalError() } func _release(_: JavaScriptObjectRef) { fatalError() } func _create_typed_array( - _: JavaScriptTypedArrayKind, + _: JavaScriptObjectRef, _: UnsafePointer, _: Int32, _: UnsafeMutablePointer! diff --git a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h index 9bdfc9b63..620854ce1 100644 --- a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h +++ b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h @@ -18,19 +18,6 @@ typedef enum __attribute__((enum_extensibility(closed))) { JavaScriptValueKindFunction = 6, } JavaScriptValueKind; -typedef enum __attribute__((enum_extensibility(closed))) { - JavaScriptTypedArrayKindInt8 = 0, - JavaScriptTypedArrayKindUint8 = 1, - JavaScriptTypedArrayKindInt16 = 2, - JavaScriptTypedArrayKindUint16 = 3, - JavaScriptTypedArrayKindInt32 = 4, - JavaScriptTypedArrayKindUint32 = 5, - JavaScriptTypedArrayKindBigInt64 = 6, - JavaScriptTypedArrayKindBigUint64 = 7, - JavaScriptTypedArrayKindFloat32 = 8, - JavaScriptTypedArrayKindFloat64 = 9, -} JavaScriptTypedArrayKind; - typedef unsigned JavaScriptPayload1; typedef unsigned JavaScriptPayload2; typedef double JavaScriptPayload3; @@ -112,7 +99,7 @@ _release(const JavaScriptObjectRef ref); __attribute__((__import_module__("javascript_kit"), __import_name__("swjs_create_typed_array"))) extern void -_create_typed_array(const JavaScriptTypedArrayKind kind, +_create_typed_array(const JavaScriptObjectRef constructor, const void *elementsPtr, const int length, JavaScriptObjectRef *result_obj);