Skip to content

Commit 9b7fda0

Browse files
Build fix for wasm32-unknown-wasi
1 parent d4e0ee8 commit 9b7fda0

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

Diff for: Sources/JavaScriptKit/FundamentalObjects/JSObject.swift

+2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public class JSObject: Equatable {
3636
@_spi(JSObject_id)
3737
public init(id: JavaScriptObjectRef) {
3838
self.id = id
39+
#if compiler(>=6.1) && _runtime(_multithreaded)
3940
self.ownerThread = pthread_self()
41+
#endif
4042
}
4143

4244
/// Asserts that the object is being accessed from the owner thread.

Diff for: Sources/JavaScriptKit/ThreadLocal.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
#if os(WASI)
12
#if canImport(wasi_pthread)
23
import wasi_pthread
4+
#endif
35
#elseif canImport(Darwin)
46
import Darwin
57
#elseif canImport(Glibc)
@@ -77,7 +79,7 @@ final class ThreadLocal<Value>: Sendable {
7779
#else
7880
// Fallback implementation for platforms that don't support pthread
7981

80-
var wrappedValue: Value?
82+
nonisolated(unsafe) var wrappedValue: Value?
8183

8284
init() where Value: AnyObject {
8385
wrappedValue = nil

Diff for: Tests/JavaScriptKitTests/ThreadLocalTests.swift

+13-16
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,38 @@ final class ThreadLocalTests: XCTestCase {
99

1010
func testLeak() throws {
1111
struct Check {
12-
@ThreadLocal
13-
static var value: MyHeapObject?
14-
@ThreadLocal(boxing: ())
15-
static var value2: MyStruct?
12+
static let value = ThreadLocal<MyHeapObject>()
13+
static let value2 = ThreadLocal<MyStruct>(boxing: ())
1614
}
1715
weak var weakObject: MyHeapObject?
1816
do {
1917
let object = MyHeapObject()
2018
weakObject = object
21-
Check.value = object
22-
XCTAssertNotNil(Check.value)
23-
XCTAssertTrue(Check.value === object)
24-
Check.value = nil
19+
Check.value.wrappedValue = object
20+
XCTAssertNotNil(Check.value.wrappedValue)
21+
XCTAssertTrue(Check.value.wrappedValue === object)
22+
Check.value.wrappedValue = nil
2523
}
2624
XCTAssertNil(weakObject)
2725

2826
weak var weakObject2: MyHeapObject?
2927
do {
3028
let object = MyHeapObject()
3129
weakObject2 = object
32-
Check.value2 = MyStruct(object: object)
33-
XCTAssertNotNil(Check.value2)
34-
XCTAssertTrue(Check.value2!.object === object)
35-
Check.value2 = nil
30+
Check.value2.wrappedValue = MyStruct(object: object)
31+
XCTAssertNotNil(Check.value2.wrappedValue)
32+
XCTAssertTrue(Check.value2.wrappedValue!.object === object)
33+
Check.value2.wrappedValue = nil
3634
}
3735
XCTAssertNil(weakObject2)
3836
}
3937

4038
func testLazyThreadLocal() throws {
4139
struct Check {
42-
@LazyThreadLocal(initialize: { MyHeapObject() })
43-
static var value: MyHeapObject
40+
static let value = LazyThreadLocal(initialize: { MyHeapObject() })
4441
}
45-
let object1 = Check.value
46-
let object2 = Check.value
42+
let object1 = Check.value.wrappedValue
43+
let object2 = Check.value.wrappedValue
4744
XCTAssertTrue(object1 === object2)
4845
}
4946
}

0 commit comments

Comments
 (0)