Skip to content

Commit b21ab18

Browse files
BridgeJS: Index known JS types for type lookup
1 parent 966daba commit b21ab18

3 files changed

Lines changed: 81 additions & 0 deletions

File tree

Plugins/BridgeJS/Sources/BridgeJSCore/SwiftToSkeleton.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ public final class SwiftToSkeleton {
2525
self.moduleName = moduleName
2626
self.exposeToGlobal = exposeToGlobal
2727
self.typeDeclResolver = TypeDeclResolver()
28+
29+
// Index known types provided by JavaScriptKit
30+
self.typeDeclResolver.addSourceFile(
31+
"""
32+
@JSClass struct JSPromise {}
33+
"""
34+
)
2835
}
2936

3037
public func addSourceFile(_ sourceFile: SourceFileSyntax, inputFilePath: String) {

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Async.Import.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@
77
export type Exports = {
88
}
99
export type Imports = {
10+
asyncReturnVoid(): JSPromise;
11+
asyncRoundTripInt(v: number): JSPromise;
12+
asyncRoundTripString(v: string): JSPromise;
13+
asyncRoundTripBool(v: boolean): JSPromise;
14+
asyncRoundTripFloat(v: number): JSPromise;
15+
asyncRoundTripDouble(v: number): JSPromise;
16+
asyncRoundTripJSObject(v: any): JSPromise;
1017
}
1118
export function createInstantiator(options: {
1219
imports: Imports;

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Async.Import.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export async function createInstantiator(options, swift) {
4141
addImports: (importObject, importsContext) => {
4242
bjs = {};
4343
importObject["bjs"] = bjs;
44+
const imports = options.getImports(importsContext);
4445
bjs["swift_js_return_string"] = function(ptr, len) {
4546
const bytes = new Uint8Array(memory.buffer, ptr, len);
4647
tmpRetString = textDecoder.decode(bytes);
@@ -190,6 +191,72 @@ export async function createInstantiator(options, swift) {
190191
tmpRetOptionalHeapObject = undefined;
191192
return pointer || 0;
192193
}
194+
const TestModule = importObject["TestModule"] = importObject["TestModule"] || {};
195+
TestModule["bjs_asyncReturnVoid"] = function bjs_asyncReturnVoid() {
196+
try {
197+
let ret = imports.asyncReturnVoid();
198+
return swift.memory.retain(ret);
199+
} catch (error) {
200+
setException(error);
201+
return 0
202+
}
203+
}
204+
TestModule["bjs_asyncRoundTripInt"] = function bjs_asyncRoundTripInt(v) {
205+
try {
206+
let ret = imports.asyncRoundTripInt(v);
207+
return swift.memory.retain(ret);
208+
} catch (error) {
209+
setException(error);
210+
return 0
211+
}
212+
}
213+
TestModule["bjs_asyncRoundTripString"] = function bjs_asyncRoundTripString(v) {
214+
try {
215+
const vObject = swift.memory.getObject(v);
216+
swift.memory.release(v);
217+
let ret = imports.asyncRoundTripString(vObject);
218+
return swift.memory.retain(ret);
219+
} catch (error) {
220+
setException(error);
221+
return 0
222+
}
223+
}
224+
TestModule["bjs_asyncRoundTripBool"] = function bjs_asyncRoundTripBool(v) {
225+
try {
226+
let ret = imports.asyncRoundTripBool(v !== 0);
227+
return swift.memory.retain(ret);
228+
} catch (error) {
229+
setException(error);
230+
return 0
231+
}
232+
}
233+
TestModule["bjs_asyncRoundTripFloat"] = function bjs_asyncRoundTripFloat(v) {
234+
try {
235+
let ret = imports.asyncRoundTripFloat(v);
236+
return swift.memory.retain(ret);
237+
} catch (error) {
238+
setException(error);
239+
return 0
240+
}
241+
}
242+
TestModule["bjs_asyncRoundTripDouble"] = function bjs_asyncRoundTripDouble(v) {
243+
try {
244+
let ret = imports.asyncRoundTripDouble(v);
245+
return swift.memory.retain(ret);
246+
} catch (error) {
247+
setException(error);
248+
return 0
249+
}
250+
}
251+
TestModule["bjs_asyncRoundTripJSObject"] = function bjs_asyncRoundTripJSObject(v) {
252+
try {
253+
let ret = imports.asyncRoundTripJSObject(swift.memory.getObject(v));
254+
return swift.memory.retain(ret);
255+
} catch (error) {
256+
setException(error);
257+
return 0
258+
}
259+
}
193260
},
194261
setInstance: (i) => {
195262
instance = i;

0 commit comments

Comments
 (0)