Skip to content

Commit f0e05f2

Browse files
Merge pull request #446 from swiftwasm/yt/unify-js-function-object
Unify JSFunction with JSObject
2 parents a069e3a + ccf742b commit f0e05f2

File tree

26 files changed

+84
-116
lines changed

26 files changed

+84
-116
lines changed

Examples/ActorOnWebWorker/Sources/MyApp.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ actor SearchService {
3030

3131
// Utility function for fetch
3232
func fetch(_ url: String) -> JSPromise {
33-
let jsFetch = JSObject.global.fetch.function!
33+
let jsFetch = JSObject.global.fetch.object!
3434
return JSPromise(jsFetch(url).object!)!
3535
}
3636

@@ -117,7 +117,7 @@ struct SearchResult {
117117
@MainActor
118118
final class App {
119119
private let document = JSObject.global.document
120-
private let alert = JSObject.global.alert.function!
120+
private let alert = JSObject.global.alert.object!
121121

122122
// UI elements
123123
private let container: JSValue

Examples/Basic/Sources/main.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import JavaScriptEventLoop
22
import JavaScriptKit
33

4-
let alert = JSObject.global.alert.function!
4+
let alert = JSObject.global.alert.object!
55
let document = JSObject.global.document
66

77
let divElement = document.createElement("div")
@@ -19,7 +19,7 @@ buttonElement.onclick = .object(
1919

2020
_ = document.body.appendChild(buttonElement)
2121

22-
private let jsFetch = JSObject.global.fetch.function!
22+
private let jsFetch = JSObject.global.fetch.object!
2323
func fetch(_ url: String) -> JSPromise {
2424
JSPromise(jsFetch(url).object!)!
2525
}

Examples/Embedded/Sources/EmbeddedApp/main.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import JavaScriptKit
22

3-
let alert = JSObject.global.alert.function!
3+
let alert = JSObject.global.alert.object!
44
let document = JSObject.global.document
55

66
print("Hello from WASM, document title: \(document.title.string ?? "")")
@@ -28,8 +28,8 @@ textInputElement.type = "text"
2828
textInputElement.placeholder = "Enter text to encode to UTF-8"
2929
textInputElement.oninput = JSValue.object(
3030
JSClosure { _ in
31-
let textEncoder = JSObject.global.TextEncoder.function!.new()
32-
let encode = textEncoder.encode.function!
31+
let textEncoder = JSObject.global.TextEncoder.object!.new()
32+
let encode = textEncoder.encode.object!
3333
let encodedData = JSTypedArray<UInt8>(
3434
unsafelyWrapping: encode(this: textEncoder, textInputElement.value).object!
3535
)

Plugins/PackageToJS/Templates/runtime.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ const decode = (kind, payload1, payload2, objectSpace) => {
3434
return payload2;
3535
case 1 /* Kind.String */:
3636
case 3 /* Kind.Object */:
37-
case 6 /* Kind.Function */:
3837
case 7 /* Kind.Symbol */:
3938
case 8 /* Kind.BigInt */:
4039
return objectSpace.getObject(payload1);
@@ -100,7 +99,7 @@ const writeAndReturnKindBits = (value, payload1_ptr, payload2_ptr, is_exception,
10099
return writeRef(3 /* Kind.Object */);
101100
}
102101
case "function": {
103-
return writeRef(6 /* Kind.Function */);
102+
return writeRef(3 /* Kind.Object */);
104103
}
105104
case "symbol": {
106105
return writeRef(7 /* Kind.Symbol */);

Runtime/src/js-value.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export const enum Kind {
88
Object = 3,
99
Null = 4,
1010
Undefined = 5,
11-
Function = 6,
1211
Symbol = 7,
1312
BigInt = 8,
1413
}
@@ -32,7 +31,6 @@ export const decode = (
3231

3332
case Kind.String:
3433
case Kind.Object:
35-
case Kind.Function:
3634
case Kind.Symbol:
3735
case Kind.BigInt:
3836
return objectSpace.getObject(payload1);
@@ -129,7 +127,7 @@ export const writeAndReturnKindBits = (
129127
return writeRef(Kind.Object);
130128
}
131129
case "function": {
132-
return writeRef(Kind.Function);
130+
return writeRef(Kind.Object);
133131
}
134132
case "symbol": {
135133
return writeRef(Kind.Symbol);
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import JavaScriptKit
22

33
extension UInt64: JavaScriptKit.ConvertibleToJSValue, JavaScriptKit.TypedArrayElement {
4-
public static var typedArrayClass: JSFunction { JSObject.global.BigUint64Array.function! }
4+
public static var typedArrayClass: JSObject { JSObject.global.BigUint64Array.object! }
55

66
public var jsValue: JSValue { .bigInt(JSBigInt(unsigned: self)) }
77
}
88

99
extension Int64: JavaScriptKit.ConvertibleToJSValue, JavaScriptKit.TypedArrayElement {
10-
public static var typedArrayClass: JSFunction { JSObject.global.BigInt64Array.function! }
10+
public static var typedArrayClass: JSObject { JSObject.global.BigInt64Array.object! }
1111

1212
public var jsValue: JSValue { .bigInt(JSBigInt(self)) }
1313
}

Sources/JavaScriptEventLoop/JSSending.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Synchronization
2323
///
2424
/// ```swift
2525
/// // Transfer an object to another thread
26-
/// let buffer = JSObject.global.Uint8Array.function!.new(100).buffer.object!
26+
/// let buffer = JSObject.global.Uint8Array.object!.new(100).buffer.object!
2727
/// let transferring = JSSending.transfer(buffer)
2828
///
2929
/// // Receive the object on a worker thread
@@ -34,7 +34,7 @@ import Synchronization
3434
/// }
3535
///
3636
/// // Clone an object for use in another thread
37-
/// let object = JSObject.global.Object.function!.new()
37+
/// let object = JSObject.global.Object.object!.new()
3838
/// object["test"] = "Hello, World!"
3939
/// let cloning = JSSending(object)
4040
///
@@ -136,7 +136,7 @@ extension JSSending where T == JSObject {
136136
/// ## Example
137137
///
138138
/// ```swift
139-
/// let buffer = JSObject.global.Uint8Array.function!.new(100).buffer.object!
139+
/// let buffer = JSObject.global.Uint8Array.object!.new(100).buffer.object!
140140
/// let transferring = JSSending.transfer(buffer)
141141
///
142142
/// // After transfer, the original buffer is neutered
@@ -167,7 +167,7 @@ extension JSSending where T == JSObject {
167167
/// ## Example
168168
///
169169
/// ```swift
170-
/// let object = JSObject.global.Object.function!.new()
170+
/// let object = JSObject.global.Object.object!.new()
171171
/// object["test"] = "Hello, World!"
172172
/// let cloning = JSSending(object)
173173
///
@@ -212,7 +212,7 @@ extension JSSending {
212212
/// ## Example - Cloning
213213
///
214214
/// ```swift
215-
/// let data = JSObject.global.Object.function!.new()
215+
/// let data = JSObject.global.Object.object!.new()
216216
/// data["value"] = 42
217217
/// let cloning = JSSending(data)
218218
///

Sources/JavaScriptEventLoop/JavaScriptEventLoop.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public final class JavaScriptEventLoop: SerialExecutor, @unchecked Sendable {
8282
let promise = JSPromise(resolver: { resolver -> Void in
8383
resolver(.success(.undefined))
8484
})
85-
let setTimeout = JSObject.global.setTimeout.function!
85+
let setTimeout = JSObject.global.setTimeout.object!
8686
let eventLoop = JavaScriptEventLoop(
8787
queueTask: { job in
8888
// TODO(katei): Should prefer `queueMicrotask` if available?

Sources/JavaScriptEventLoop/WebWorkerTaskExecutor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import WASILibc
3434
///
3535
/// ```swift
3636
/// // Create and transfer an object to a worker thread
37-
/// let buffer = JSObject.global.ArrayBuffer.function!.new(1024).object!
37+
/// let buffer = JSObject.global.ArrayBuffer.object!.new(1024).object!
3838
/// let transferring = JSSending.transfer(buffer)
3939
///
4040
/// let task = Task(executorPreference: executor) {

Sources/JavaScriptKit/BasicObjects/JSArray.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
/// class](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)
33
/// that exposes its properties in a type-safe and Swifty way.
44
public class JSArray: JSBridgedClass {
5-
public static var constructor: JSFunction? { _constructor.wrappedValue }
6-
private static let _constructor = LazyThreadLocal(initialize: { JSObject.global.Array.function })
5+
public static var constructor: JSObject? { _constructor.wrappedValue }
6+
private static let _constructor = LazyThreadLocal(initialize: { JSObject.global.Array.object })
77

88
static func isArray(_ object: JSObject) -> Bool {
99
constructor!.isArray!(object).boolean!

0 commit comments

Comments
 (0)