Skip to content

Commit 38af37b

Browse files
committed
BridgeJS: Delegate nested container codegen to generic runtime conformances
1 parent dd1cb58 commit 38af37b

File tree

4 files changed

+48
-248
lines changed

4 files changed

+48
-248
lines changed

Benchmarks/Sources/Generated/BridgeJS.swift

Lines changed: 8 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,16 +1565,7 @@ public func _bjs_ArrayRoundtrip_makePointArrayLarge(_ _self: UnsafeMutableRawPoi
15651565
@_cdecl("bjs_ArrayRoundtrip_takeNestedIntArray")
15661566
public func _bjs_ArrayRoundtrip_takeNestedIntArray(_ _self: UnsafeMutableRawPointer) -> Void {
15671567
#if arch(wasm32)
1568-
ArrayRoundtrip.bridgeJSLiftParameter(_self).takeNestedIntArray(_: {
1569-
let __count = Int(_swift_js_pop_i32())
1570-
var __result: [[Int]] = []
1571-
__result.reserveCapacity(__count)
1572-
for _ in 0..<__count {
1573-
__result.append([Int].bridgeJSLiftParameter())
1574-
}
1575-
__result.reverse()
1576-
return __result
1577-
}())
1568+
ArrayRoundtrip.bridgeJSLiftParameter(_self).takeNestedIntArray(_: [[Int]].bridgeJSLiftParameter())
15781569
#else
15791570
fatalError("Only available on WebAssembly")
15801571
#endif
@@ -1585,10 +1576,7 @@ public func _bjs_ArrayRoundtrip_takeNestedIntArray(_ _self: UnsafeMutableRawPoin
15851576
public func _bjs_ArrayRoundtrip_makeNestedIntArray(_ _self: UnsafeMutableRawPointer) -> Void {
15861577
#if arch(wasm32)
15871578
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).makeNestedIntArray()
1588-
for __bjs_elem_ret in ret {
1589-
__bjs_elem_ret.bridgeJSLowerReturn()
1590-
}
1591-
_swift_js_push_i32(Int32(ret.count))
1579+
ret.bridgeJSLowerReturn()
15921580
#else
15931581
fatalError("Only available on WebAssembly")
15941582
#endif
@@ -1598,20 +1586,8 @@ public func _bjs_ArrayRoundtrip_makeNestedIntArray(_ _self: UnsafeMutableRawPoin
15981586
@_cdecl("bjs_ArrayRoundtrip_roundtripNestedIntArray")
15991587
public func _bjs_ArrayRoundtrip_roundtripNestedIntArray(_ _self: UnsafeMutableRawPointer) -> Void {
16001588
#if arch(wasm32)
1601-
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).roundtripNestedIntArray(_: {
1602-
let __count = Int(_swift_js_pop_i32())
1603-
var __result: [[Int]] = []
1604-
__result.reserveCapacity(__count)
1605-
for _ in 0..<__count {
1606-
__result.append([Int].bridgeJSLiftParameter())
1607-
}
1608-
__result.reverse()
1609-
return __result
1610-
}())
1611-
for __bjs_elem_ret in ret {
1612-
__bjs_elem_ret.bridgeJSLowerReturn()
1613-
}
1614-
_swift_js_push_i32(Int32(ret.count))
1589+
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).roundtripNestedIntArray(_: [[Int]].bridgeJSLiftParameter())
1590+
ret.bridgeJSLowerReturn()
16151591
#else
16161592
fatalError("Only available on WebAssembly")
16171593
#endif
@@ -1621,16 +1597,7 @@ public func _bjs_ArrayRoundtrip_roundtripNestedIntArray(_ _self: UnsafeMutableRa
16211597
@_cdecl("bjs_ArrayRoundtrip_takeNestedPointArray")
16221598
public func _bjs_ArrayRoundtrip_takeNestedPointArray(_ _self: UnsafeMutableRawPointer) -> Void {
16231599
#if arch(wasm32)
1624-
ArrayRoundtrip.bridgeJSLiftParameter(_self).takeNestedPointArray(_: {
1625-
let __count = Int(_swift_js_pop_i32())
1626-
var __result: [[Point]] = []
1627-
__result.reserveCapacity(__count)
1628-
for _ in 0..<__count {
1629-
__result.append([Point].bridgeJSLiftParameter())
1630-
}
1631-
__result.reverse()
1632-
return __result
1633-
}())
1600+
ArrayRoundtrip.bridgeJSLiftParameter(_self).takeNestedPointArray(_: [[Point]].bridgeJSLiftParameter())
16341601
#else
16351602
fatalError("Only available on WebAssembly")
16361603
#endif
@@ -1641,10 +1608,7 @@ public func _bjs_ArrayRoundtrip_takeNestedPointArray(_ _self: UnsafeMutableRawPo
16411608
public func _bjs_ArrayRoundtrip_makeNestedPointArray(_ _self: UnsafeMutableRawPointer) -> Void {
16421609
#if arch(wasm32)
16431610
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).makeNestedPointArray()
1644-
for __bjs_elem_ret in ret {
1645-
__bjs_elem_ret.bridgeJSLowerReturn()
1646-
}
1647-
_swift_js_push_i32(Int32(ret.count))
1611+
ret.bridgeJSLowerReturn()
16481612
#else
16491613
fatalError("Only available on WebAssembly")
16501614
#endif
@@ -1654,20 +1618,8 @@ public func _bjs_ArrayRoundtrip_makeNestedPointArray(_ _self: UnsafeMutableRawPo
16541618
@_cdecl("bjs_ArrayRoundtrip_roundtripNestedPointArray")
16551619
public func _bjs_ArrayRoundtrip_roundtripNestedPointArray(_ _self: UnsafeMutableRawPointer) -> Void {
16561620
#if arch(wasm32)
1657-
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).roundtripNestedPointArray(_: {
1658-
let __count = Int(_swift_js_pop_i32())
1659-
var __result: [[Point]] = []
1660-
__result.reserveCapacity(__count)
1661-
for _ in 0..<__count {
1662-
__result.append([Point].bridgeJSLiftParameter())
1663-
}
1664-
__result.reverse()
1665-
return __result
1666-
}())
1667-
for __bjs_elem_ret in ret {
1668-
__bjs_elem_ret.bridgeJSLowerReturn()
1669-
}
1670-
_swift_js_push_i32(Int32(ret.count))
1621+
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).roundtripNestedPointArray(_: [[Point]].bridgeJSLiftParameter())
1622+
ret.bridgeJSLowerReturn()
16711623
#else
16721624
fatalError("Only available on WebAssembly")
16731625
#endif

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -838,18 +838,16 @@ struct StackCodegen {
838838

839839
func liftArrayExpression(elementType: BridgeType) -> ExprSyntax {
840840
switch elementType {
841-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
842-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
843-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
844-
return "[\(raw: elementType.swiftType)].bridgeJSLiftParameter()"
845-
case .jsObject(_?):
841+
case .jsObject(let className?) where className != "JSObject":
846842
return liftArrayExpressionInline(elementType: elementType)
847843
case .swiftProtocol(let protocolName):
848844
return "[Any\(raw: protocolName)].bridgeJSLiftParameter()"
849-
case .nullable, .array, .closure, .dictionary:
845+
case .nullable, .closure:
850846
return liftArrayExpressionInline(elementType: elementType)
851847
case .void, .namespaceEnum:
852848
fatalError("Invalid array element type: \(elementType)")
849+
default:
850+
return "[\(raw: elementType.swiftType)].bridgeJSLiftParameter()"
853851
}
854852
}
855853

@@ -872,11 +870,7 @@ struct StackCodegen {
872870

873871
func liftDictionaryExpression(valueType: BridgeType) -> ExprSyntax {
874872
switch valueType {
875-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
876-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
877-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
878-
return "[String: \(raw: valueType.swiftType)].bridgeJSLiftParameter()"
879-
case .jsObject(let className?):
873+
case .jsObject(let className?) where className != "JSObject":
880874
return """
881875
{
882876
let __dict = [String: JSObject].bridgeJSLiftParameter()
@@ -890,10 +884,12 @@ struct StackCodegen {
890884
return __dict.mapValues { $0 as! Any\(raw: protocolName) }
891885
}()
892886
"""
893-
case .nullable, .array, .dictionary, .closure:
887+
case .nullable, .closure:
894888
return liftDictionaryExpressionInline(valueType: valueType)
895889
case .void, .namespaceEnum:
896890
fatalError("Invalid dictionary value type: \(valueType)")
891+
default:
892+
return "[String: \(raw: valueType.swiftType)].bridgeJSLiftParameter()"
897893
}
898894
}
899895

@@ -1005,22 +1001,20 @@ struct StackCodegen {
10051001
varPrefix: String
10061002
) -> [CodeBlockItemSyntax] {
10071003
switch elementType {
1008-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
1009-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
1010-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
1011-
return ["\(raw: accessor).bridgeJSLowerReturn()"]
1012-
case .jsObject(_?):
1004+
case .jsObject(let className?) where className != "JSObject":
10131005
return ["\(raw: accessor).map { $0.jsObject }.bridgeJSLowerReturn()"]
10141006
case .swiftProtocol(let protocolName):
10151007
return ["\(raw: accessor).map { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
1016-
case .nullable, .array, .closure, .dictionary:
1008+
case .nullable, .closure:
10171009
return lowerArrayStatementsInline(
10181010
elementType: elementType,
10191011
accessor: accessor,
10201012
varPrefix: varPrefix
10211013
)
10221014
case .void, .namespaceEnum:
10231015
fatalError("Invalid array element type: \(elementType)")
1016+
default:
1017+
return ["\(raw: accessor).bridgeJSLowerReturn()"]
10241018
}
10251019
}
10261020

@@ -1054,22 +1048,20 @@ struct StackCodegen {
10541048
varPrefix: String
10551049
) -> [CodeBlockItemSyntax] {
10561050
switch valueType {
1057-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
1058-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
1059-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
1060-
return ["\(raw: accessor).bridgeJSLowerReturn()"]
1061-
case .jsObject(_?):
1051+
case .jsObject(let className?) where className != "JSObject":
10621052
return ["\(raw: accessor).mapValues { $0.jsObject }.bridgeJSLowerReturn()"]
10631053
case .swiftProtocol(let protocolName):
10641054
return ["\(raw: accessor).mapValues { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
1065-
case .nullable, .array, .dictionary, .closure:
1055+
case .nullable, .closure:
10661056
return lowerDictionaryStatementsInline(
10671057
valueType: valueType,
10681058
accessor: accessor,
10691059
varPrefix: varPrefix
10701060
)
10711061
case .void, .namespaceEnum:
10721062
fatalError("Invalid dictionary value type: \(valueType)")
1063+
default:
1064+
return ["\(raw: accessor).bridgeJSLowerReturn()"]
10731065
}
10741066
}
10751067

Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/ArrayTypes.swift

Lines changed: 10 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -381,20 +381,8 @@ public func _bjs_processOptionalStatusArray() -> Void {
381381
@_cdecl("bjs_processNestedIntArray")
382382
public func _bjs_processNestedIntArray() -> Void {
383383
#if arch(wasm32)
384-
let ret = processNestedIntArray(_: {
385-
let __count = Int(_swift_js_pop_i32())
386-
var __result: [[Int]] = []
387-
__result.reserveCapacity(__count)
388-
for _ in 0..<__count {
389-
__result.append([Int].bridgeJSLiftParameter())
390-
}
391-
__result.reverse()
392-
return __result
393-
}())
394-
for __bjs_elem_ret in ret {
395-
__bjs_elem_ret.bridgeJSLowerReturn()
396-
}
397-
_swift_js_push_i32(Int32(ret.count))
384+
let ret = processNestedIntArray(_: [[Int]].bridgeJSLiftParameter())
385+
ret.bridgeJSLowerReturn()
398386
#else
399387
fatalError("Only available on WebAssembly")
400388
#endif
@@ -404,20 +392,8 @@ public func _bjs_processNestedIntArray() -> Void {
404392
@_cdecl("bjs_processNestedStringArray")
405393
public func _bjs_processNestedStringArray() -> Void {
406394
#if arch(wasm32)
407-
let ret = processNestedStringArray(_: {
408-
let __count = Int(_swift_js_pop_i32())
409-
var __result: [[String]] = []
410-
__result.reserveCapacity(__count)
411-
for _ in 0..<__count {
412-
__result.append([String].bridgeJSLiftParameter())
413-
}
414-
__result.reverse()
415-
return __result
416-
}())
417-
for __bjs_elem_ret in ret {
418-
__bjs_elem_ret.bridgeJSLowerReturn()
419-
}
420-
_swift_js_push_i32(Int32(ret.count))
395+
let ret = processNestedStringArray(_: [[String]].bridgeJSLiftParameter())
396+
ret.bridgeJSLowerReturn()
421397
#else
422398
fatalError("Only available on WebAssembly")
423399
#endif
@@ -427,20 +403,8 @@ public func _bjs_processNestedStringArray() -> Void {
427403
@_cdecl("bjs_processNestedPointArray")
428404
public func _bjs_processNestedPointArray() -> Void {
429405
#if arch(wasm32)
430-
let ret = processNestedPointArray(_: {
431-
let __count = Int(_swift_js_pop_i32())
432-
var __result: [[Point]] = []
433-
__result.reserveCapacity(__count)
434-
for _ in 0..<__count {
435-
__result.append([Point].bridgeJSLiftParameter())
436-
}
437-
__result.reverse()
438-
return __result
439-
}())
440-
for __bjs_elem_ret in ret {
441-
__bjs_elem_ret.bridgeJSLowerReturn()
442-
}
443-
_swift_js_push_i32(Int32(ret.count))
406+
let ret = processNestedPointArray(_: [[Point]].bridgeJSLiftParameter())
407+
ret.bridgeJSLowerReturn()
444408
#else
445409
fatalError("Only available on WebAssembly")
446410
#endif
@@ -461,20 +425,8 @@ public func _bjs_processItemArray() -> Void {
461425
@_cdecl("bjs_processNestedItemArray")
462426
public func _bjs_processNestedItemArray() -> Void {
463427
#if arch(wasm32)
464-
let ret = processNestedItemArray(_: {
465-
let __count = Int(_swift_js_pop_i32())
466-
var __result: [[Item]] = []
467-
__result.reserveCapacity(__count)
468-
for _ in 0..<__count {
469-
__result.append([Item].bridgeJSLiftParameter())
470-
}
471-
__result.reverse()
472-
return __result
473-
}())
474-
for __bjs_elem_ret in ret {
475-
__bjs_elem_ret.bridgeJSLowerReturn()
476-
}
477-
_swift_js_push_i32(Int32(ret.count))
428+
let ret = processNestedItemArray(_: [[Item]].bridgeJSLiftParameter())
429+
ret.bridgeJSLowerReturn()
478430
#else
479431
fatalError("Only available on WebAssembly")
480432
#endif
@@ -522,20 +474,8 @@ public func _bjs_processOptionalJSObjectArray() -> Void {
522474
@_cdecl("bjs_processNestedJSObjectArray")
523475
public func _bjs_processNestedJSObjectArray() -> Void {
524476
#if arch(wasm32)
525-
let ret = processNestedJSObjectArray(_: {
526-
let __count = Int(_swift_js_pop_i32())
527-
var __result: [[JSObject]] = []
528-
__result.reserveCapacity(__count)
529-
for _ in 0..<__count {
530-
__result.append([JSObject].bridgeJSLiftParameter())
531-
}
532-
__result.reverse()
533-
return __result
534-
}())
535-
for __bjs_elem_ret in ret {
536-
__bjs_elem_ret.bridgeJSLowerReturn()
537-
}
538-
_swift_js_push_i32(Int32(ret.count))
477+
let ret = processNestedJSObjectArray(_: [[JSObject]].bridgeJSLiftParameter())
478+
ret.bridgeJSLowerReturn()
539479
#else
540480
fatalError("Only available on WebAssembly")
541481
#endif

0 commit comments

Comments
 (0)