From 73691c6b2697ca28e2a58751cea5a5545916d531 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Mon, 19 Dec 2022 14:59:08 +0000 Subject: [PATCH] Prefer UInt(bitPattern:) for object id to guarantee uniqueness Close https://github.com/swiftwasm/JavaScriptKit/issues/218 --- Sources/JavaScriptKit/FundamentalObjects/JSClosure.swift | 4 ++-- Sources/_CJavaScriptKit/include/_CJavaScriptKit.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/JavaScriptKit/FundamentalObjects/JSClosure.swift b/Sources/JavaScriptKit/FundamentalObjects/JSClosure.swift index c19f3ba8b..ea15c6d28 100644 --- a/Sources/JavaScriptKit/FundamentalObjects/JSClosure.swift +++ b/Sources/JavaScriptKit/FundamentalObjects/JSClosure.swift @@ -20,7 +20,7 @@ public class JSOneshotClosure: JSObject, JSClosureProtocol { super.init(id: 0) // 2. Create a new JavaScript function which calls the given Swift function. - hostFuncRef = JavaScriptHostFuncRef(bitPattern: Int32(ObjectIdentifier(self).hashValue)) + hostFuncRef = JavaScriptHostFuncRef(bitPattern: ObjectIdentifier(self)) id = withExtendedLifetime(JSString(file)) { file in _create_function(hostFuncRef, line, file.asInternalJSRef()) } @@ -86,7 +86,7 @@ public class JSClosure: JSObject, JSClosureProtocol { super.init(id: 0) // 2. Create a new JavaScript function which calls the given Swift function. - hostFuncRef = JavaScriptHostFuncRef(bitPattern: Int32(ObjectIdentifier(self).hashValue)) + hostFuncRef = JavaScriptHostFuncRef(bitPattern: ObjectIdentifier(self)) id = withExtendedLifetime(JSString(file)) { file in _create_function(hostFuncRef, line, file.asInternalJSRef()) } diff --git a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h index 3bac436f4..b60007ed0 100644 --- a/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h +++ b/Sources/_CJavaScriptKit/include/_CJavaScriptKit.h @@ -10,7 +10,7 @@ typedef unsigned int JavaScriptObjectRef; /// `JavaScriptHostFuncRef` represents Swift closure that is referenced by JavaScript side. /// This value is produced by `JSClosure`. -typedef unsigned int JavaScriptHostFuncRef; +typedef uintptr_t JavaScriptHostFuncRef; /// `JavaScriptValueKind` represents the kind of JavaScript primitive value. typedef enum __attribute__((enum_extensibility(closed))) {