Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3d25cd9

Browse filesBrowse files
[BridgeJS] Pass String parameters unretained as (address, length) (swiftwasm#688)
* pass unretained strings as tuple * Generalize lowering parameters with borrowing scope * factored out decodeString global * formatting * format (with Swift 6.2) --------- Co-authored-by: Yuta Saito <yuta@goodnotes.com>
1 parent bc05d2a commit 3d25cd9
Copy full SHA for 3d25cd9

59 files changed

+1,000-880Lines changed: 1000 additions & 880 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎Benchmarks/Sources/Generated/BridgeJS.swift‎

Copy file name to clipboardExpand all lines: Benchmarks/Sources/Generated/BridgeJS.swift
+8-7Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,20 +1750,21 @@ func _$benchmarkHelperNoopWithNumber(_ n: Double) throws(JSException) -> Void {
17501750

17511751
#if arch(wasm32)
17521752
@_extern(wasm, module: "Benchmarks", name: "bjs_benchmarkRunner")
1753-
fileprivate func bjs_benchmarkRunner_extern(_ name: Int32, _ body: Int32) -> Void
1753+
fileprivate func bjs_benchmarkRunner_extern(_ nameBytes: Int32, _ nameLength: Int32, _ body: Int32) -> Void
17541754
#else
1755-
fileprivate func bjs_benchmarkRunner_extern(_ name: Int32, _ body: Int32) -> Void {
1755+
fileprivate func bjs_benchmarkRunner_extern(_ nameBytes: Int32, _ nameLength: Int32, _ body: Int32) -> Void {
17561756
fatalError("Only available on WebAssembly")
17571757
}
17581758
#endif
1759-
@inline(never) fileprivate func bjs_benchmarkRunner(_ name: Int32, _ body: Int32) -> Void {
1760-
return bjs_benchmarkRunner_extern(name, body)
1759+
@inline(never) fileprivate func bjs_benchmarkRunner(_ nameBytes: Int32, _ nameLength: Int32, _ body: Int32) -> Void {
1760+
return bjs_benchmarkRunner_extern(nameBytes, nameLength, body)
17611761
}
17621762

17631763
func _$benchmarkRunner(_ name: String, _ body: JSObject) throws(JSException) -> Void {
1764-
let nameValue = name.bridgeJSLowerParameter()
1765-
let bodyValue = body.bridgeJSLowerParameter()
1766-
bjs_benchmarkRunner(nameValue, bodyValue)
1764+
name.bridgeJSWithLoweredParameter { (nameBytes, nameLength) in
1765+
let bodyValue = body.bridgeJSLowerParameter()
1766+
bjs_benchmarkRunner(nameBytes, nameLength, bodyValue)
1767+
}
17671768
if let error = _swift_js_take_exception() {
17681769
throw error
17691770
}
Collapse file

‎Examples/PlayBridgeJS/Sources/PlayBridgeJS/Generated/BridgeJS.swift‎

Copy file name to clipboardExpand all lines: Examples/PlayBridgeJS/Sources/PlayBridgeJS/Generated/BridgeJS.swift
+9-6Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -249,20 +249,23 @@ func _$createTS2Swift() throws(JSException) -> TS2Swift {
249249

250250
#if arch(wasm32)
251251
@_extern(wasm, module: "PlayBridgeJS", name: "bjs_TS2Swift_convert")
252-
fileprivate func bjs_TS2Swift_convert_extern(_ self: Int32, _ ts: Int32) -> Int32
252+
fileprivate func bjs_TS2Swift_convert_extern(_ self: Int32, _ tsBytes: Int32, _ tsLength: Int32) -> Int32
253253
#else
254-
fileprivate func bjs_TS2Swift_convert_extern(_ self: Int32, _ ts: Int32) -> Int32 {
254+
fileprivate func bjs_TS2Swift_convert_extern(_ self: Int32, _ tsBytes: Int32, _ tsLength: Int32) -> Int32 {
255255
fatalError("Only available on WebAssembly")
256256
}
257257
#endif
258-
@inline(never) fileprivate func bjs_TS2Swift_convert(_ self: Int32, _ ts: Int32) -> Int32 {
259-
return bjs_TS2Swift_convert_extern(self, ts)
258+
@inline(never) fileprivate func bjs_TS2Swift_convert(_ self: Int32, _ tsBytes: Int32, _ tsLength: Int32) -> Int32 {
259+
return bjs_TS2Swift_convert_extern(self, tsBytes, tsLength)
260260
}
261261

262262
func _$TS2Swift_convert(_ self: JSObject, _ ts: String) throws(JSException) -> String {
263263
let selfValue = self.bridgeJSLowerParameter()
264-
let tsValue = ts.bridgeJSLowerParameter()
265-
let ret = bjs_TS2Swift_convert(selfValue, tsValue)
264+
let ret0 = ts.bridgeJSWithLoweredParameter { (tsBytes, tsLength) in
265+
let ret = bjs_TS2Swift_convert(selfValue, tsBytes, tsLength)
266+
return ret
267+
}
268+
let ret = ret0
266269
if let error = _swift_js_take_exception() {
267270
throw error
268271
}
Collapse file

‎Plugins/BridgeJS/Sources/BridgeJSCore/ClosureCodegen.swift‎

Copy file name to clipboardExpand all lines: Plugins/BridgeJS/Sources/BridgeJSCore/ClosureCodegen.swift
+4-3Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ public struct ClosureCodegen {
2626
let externName = "invoke_js_callback_\(signature.moduleName)_\(mangledName)"
2727

2828
// Use CallJSEmission to generate the callback invocation
29-
let builder = ImportTS.CallJSEmission(
29+
let builder = try ImportTS.CallJSEmission(
3030
moduleName: "bjs",
3131
abiName: externName,
32+
returnType: signature.returnType,
3233
context: .exportSwift
3334
)
3435

@@ -41,8 +42,8 @@ public struct ClosureCodegen {
4142
}
4243

4344
// Generate the call and return value lifting
44-
try builder.call(returnType: signature.returnType)
45-
try builder.liftReturnValue(returnType: signature.returnType)
45+
try builder.call()
46+
try builder.liftReturnValue()
4647

4748
// Generate extern declaration using CallJSEmission
4849
let externDecl = builder.renderImportDecl()
Collapse file

‎Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift‎

Copy file name to clipboardExpand all lines: Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift
+11-8Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,17 +1177,18 @@ struct ProtocolCodegen {
11771177
var externDecls: [DeclSyntax] = []
11781178

11791179
for method in proto.methods {
1180-
let builder = ImportTS.CallJSEmission(
1180+
let builder = try ImportTS.CallJSEmission(
11811181
moduleName: moduleName,
11821182
abiName: "_extern_\(method.name)",
1183+
returnType: method.returnType,
11831184
context: .exportSwift
11841185
)
11851186
try builder.lowerParameter(param: Parameter(label: nil, name: "jsObject", type: .jsObject(nil)))
11861187
for param in method.parameters {
11871188
try builder.lowerParameter(param: param)
11881189
}
1189-
try builder.call(returnType: method.returnType)
1190-
try builder.liftReturnValue(returnType: method.returnType)
1190+
try builder.call()
1191+
try builder.liftReturnValue()
11911192

11921193
// Build function signature using SwiftSignatureBuilder
11931194
let signature = SwiftSignatureBuilder.buildFunctionSignature(
@@ -1275,14 +1276,15 @@ struct ProtocolCodegen {
12751276
className: protocolName
12761277
)
12771278

1278-
let getterBuilder = ImportTS.CallJSEmission(
1279+
let getterBuilder = try ImportTS.CallJSEmission(
12791280
moduleName: moduleName,
12801281
abiName: getterAbiName,
1282+
returnType: property.type,
12811283
context: .exportSwift
12821284
)
12831285
try getterBuilder.lowerParameter(param: Parameter(label: nil, name: "jsObject", type: .jsObject(nil)))
1284-
try getterBuilder.call(returnType: property.type)
1285-
try getterBuilder.liftReturnValue(returnType: property.type)
1286+
try getterBuilder.call()
1287+
try getterBuilder.liftReturnValue()
12861288

12871289
// Build getter extern declaration using helper function
12881290
let getterExternDeclPrinter = CodeFragmentPrinter()
@@ -1307,14 +1309,15 @@ struct ProtocolCodegen {
13071309

13081310
if property.isReadonly { return }
13091311

1310-
let setterBuilder = ImportTS.CallJSEmission(
1312+
let setterBuilder = try ImportTS.CallJSEmission(
13111313
moduleName: moduleName,
13121314
abiName: setterAbiName,
1315+
returnType: .void,
13131316
context: .exportSwift
13141317
)
13151318
try setterBuilder.lowerParameter(param: Parameter(label: nil, name: "jsObject", type: .jsObject(nil)))
13161319
try setterBuilder.lowerParameter(param: Parameter(label: nil, name: "newValue", type: property.type))
1317-
try setterBuilder.call(returnType: .void)
1320+
try setterBuilder.call()
13181321

13191322
// Build setter extern declaration using helper function
13201323
let setterExternDeclPrinter = CodeFragmentPrinter()

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.