Skip to content

Commit 9ab70c6

Browse files
Merge pull request #619 from PassiveLogic/kr/container-codegen-simplification
NFC: BridgeJS: Delegate nested container codegen to generic runtime conformances
2 parents 1b99431 + 38af37b commit 9ab70c6

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
@@ -818,18 +818,16 @@ struct StackCodegen {
818818

819819
func liftArrayExpression(elementType: BridgeType) -> ExprSyntax {
820820
switch elementType {
821-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
822-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
823-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
824-
return "[\(raw: elementType.swiftType)].bridgeJSLiftParameter()"
825-
case .jsObject(_?):
821+
case .jsObject(let className?) where className != "JSObject":
826822
return liftArrayExpressionInline(elementType: elementType)
827823
case .swiftProtocol(let protocolName):
828824
return "[Any\(raw: protocolName)].bridgeJSLiftParameter()"
829-
case .nullable, .array, .closure, .dictionary:
825+
case .nullable, .closure:
830826
return liftArrayExpressionInline(elementType: elementType)
831827
case .void, .namespaceEnum:
832828
fatalError("Invalid array element type: \(elementType)")
829+
default:
830+
return "[\(raw: elementType.swiftType)].bridgeJSLiftParameter()"
833831
}
834832
}
835833

@@ -852,11 +850,7 @@ struct StackCodegen {
852850

853851
func liftDictionaryExpression(valueType: BridgeType) -> ExprSyntax {
854852
switch valueType {
855-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
856-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
857-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
858-
return "[String: \(raw: valueType.swiftType)].bridgeJSLiftParameter()"
859-
case .jsObject(let className?):
853+
case .jsObject(let className?) where className != "JSObject":
860854
return """
861855
{
862856
let __dict = [String: JSObject].bridgeJSLiftParameter()
@@ -870,10 +864,12 @@ struct StackCodegen {
870864
return __dict.mapValues { $0 as! Any\(raw: protocolName) }
871865
}()
872866
"""
873-
case .nullable, .array, .dictionary, .closure:
867+
case .nullable, .closure:
874868
return liftDictionaryExpressionInline(valueType: valueType)
875869
case .void, .namespaceEnum:
876870
fatalError("Invalid dictionary value type: \(valueType)")
871+
default:
872+
return "[String: \(raw: valueType.swiftType)].bridgeJSLiftParameter()"
877873
}
878874
}
879875

@@ -953,22 +949,20 @@ struct StackCodegen {
953949
varPrefix: String
954950
) -> [CodeBlockItemSyntax] {
955951
switch elementType {
956-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
957-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
958-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
959-
return ["\(raw: accessor).bridgeJSLowerReturn()"]
960-
case .jsObject(_?):
952+
case .jsObject(let className?) where className != "JSObject":
961953
return ["\(raw: accessor).map { $0.jsObject }.bridgeJSLowerReturn()"]
962954
case .swiftProtocol(let protocolName):
963955
return ["\(raw: accessor).map { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
964-
case .nullable, .array, .closure, .dictionary:
956+
case .nullable, .closure:
965957
return lowerArrayStatementsInline(
966958
elementType: elementType,
967959
accessor: accessor,
968960
varPrefix: varPrefix
969961
)
970962
case .void, .namespaceEnum:
971963
fatalError("Invalid array element type: \(elementType)")
964+
default:
965+
return ["\(raw: accessor).bridgeJSLowerReturn()"]
972966
}
973967
}
974968

@@ -1002,22 +996,20 @@ struct StackCodegen {
1002996
varPrefix: String
1003997
) -> [CodeBlockItemSyntax] {
1004998
switch valueType {
1005-
case .int, .uint, .float, .double, .string, .bool, .jsValue,
1006-
.jsObject(nil), .swiftStruct, .caseEnum, .swiftHeapObject,
1007-
.unsafePointer, .rawValueEnum, .associatedValueEnum:
1008-
return ["\(raw: accessor).bridgeJSLowerReturn()"]
1009-
case .jsObject(_?):
999+
case .jsObject(let className?) where className != "JSObject":
10101000
return ["\(raw: accessor).mapValues { $0.jsObject }.bridgeJSLowerReturn()"]
10111001
case .swiftProtocol(let protocolName):
10121002
return ["\(raw: accessor).mapValues { $0 as! Any\(raw: protocolName) }.bridgeJSLowerReturn()"]
1013-
case .nullable, .array, .dictionary, .closure:
1003+
case .nullable, .closure:
10141004
return lowerDictionaryStatementsInline(
10151005
valueType: valueType,
10161006
accessor: accessor,
10171007
varPrefix: varPrefix
10181008
)
10191009
case .void, .namespaceEnum:
10201010
fatalError("Invalid dictionary value type: \(valueType)")
1011+
default:
1012+
return ["\(raw: accessor).bridgeJSLowerReturn()"]
10211013
}
10221014
}
10231015

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

Lines changed: 10 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -367,20 +367,8 @@ public func _bjs_processOptionalStatusArray() -> Void {
367367
@_cdecl("bjs_processNestedIntArray")
368368
public func _bjs_processNestedIntArray() -> Void {
369369
#if arch(wasm32)
370-
let ret = processNestedIntArray(_: {
371-
let __count = Int(_swift_js_pop_i32())
372-
var __result: [[Int]] = []
373-
__result.reserveCapacity(__count)
374-
for _ in 0..<__count {
375-
__result.append([Int].bridgeJSLiftParameter())
376-
}
377-
__result.reverse()
378-
return __result
379-
}())
380-
for __bjs_elem_ret in ret {
381-
__bjs_elem_ret.bridgeJSLowerReturn()
382-
}
383-
_swift_js_push_i32(Int32(ret.count))
370+
let ret = processNestedIntArray(_: [[Int]].bridgeJSLiftParameter())
371+
ret.bridgeJSLowerReturn()
384372
#else
385373
fatalError("Only available on WebAssembly")
386374
#endif
@@ -390,20 +378,8 @@ public func _bjs_processNestedIntArray() -> Void {
390378
@_cdecl("bjs_processNestedStringArray")
391379
public func _bjs_processNestedStringArray() -> Void {
392380
#if arch(wasm32)
393-
let ret = processNestedStringArray(_: {
394-
let __count = Int(_swift_js_pop_i32())
395-
var __result: [[String]] = []
396-
__result.reserveCapacity(__count)
397-
for _ in 0..<__count {
398-
__result.append([String].bridgeJSLiftParameter())
399-
}
400-
__result.reverse()
401-
return __result
402-
}())
403-
for __bjs_elem_ret in ret {
404-
__bjs_elem_ret.bridgeJSLowerReturn()
405-
}
406-
_swift_js_push_i32(Int32(ret.count))
381+
let ret = processNestedStringArray(_: [[String]].bridgeJSLiftParameter())
382+
ret.bridgeJSLowerReturn()
407383
#else
408384
fatalError("Only available on WebAssembly")
409385
#endif
@@ -413,20 +389,8 @@ public func _bjs_processNestedStringArray() -> Void {
413389
@_cdecl("bjs_processNestedPointArray")
414390
public func _bjs_processNestedPointArray() -> Void {
415391
#if arch(wasm32)
416-
let ret = processNestedPointArray(_: {
417-
let __count = Int(_swift_js_pop_i32())
418-
var __result: [[Point]] = []
419-
__result.reserveCapacity(__count)
420-
for _ in 0..<__count {
421-
__result.append([Point].bridgeJSLiftParameter())
422-
}
423-
__result.reverse()
424-
return __result
425-
}())
426-
for __bjs_elem_ret in ret {
427-
__bjs_elem_ret.bridgeJSLowerReturn()
428-
}
429-
_swift_js_push_i32(Int32(ret.count))
392+
let ret = processNestedPointArray(_: [[Point]].bridgeJSLiftParameter())
393+
ret.bridgeJSLowerReturn()
430394
#else
431395
fatalError("Only available on WebAssembly")
432396
#endif
@@ -447,20 +411,8 @@ public func _bjs_processItemArray() -> Void {
447411
@_cdecl("bjs_processNestedItemArray")
448412
public func _bjs_processNestedItemArray() -> Void {
449413
#if arch(wasm32)
450-
let ret = processNestedItemArray(_: {
451-
let __count = Int(_swift_js_pop_i32())
452-
var __result: [[Item]] = []
453-
__result.reserveCapacity(__count)
454-
for _ in 0..<__count {
455-
__result.append([Item].bridgeJSLiftParameter())
456-
}
457-
__result.reverse()
458-
return __result
459-
}())
460-
for __bjs_elem_ret in ret {
461-
__bjs_elem_ret.bridgeJSLowerReturn()
462-
}
463-
_swift_js_push_i32(Int32(ret.count))
414+
let ret = processNestedItemArray(_: [[Item]].bridgeJSLiftParameter())
415+
ret.bridgeJSLowerReturn()
464416
#else
465417
fatalError("Only available on WebAssembly")
466418
#endif
@@ -508,20 +460,8 @@ public func _bjs_processOptionalJSObjectArray() -> Void {
508460
@_cdecl("bjs_processNestedJSObjectArray")
509461
public func _bjs_processNestedJSObjectArray() -> Void {
510462
#if arch(wasm32)
511-
let ret = processNestedJSObjectArray(_: {
512-
let __count = Int(_swift_js_pop_i32())
513-
var __result: [[JSObject]] = []
514-
__result.reserveCapacity(__count)
515-
for _ in 0..<__count {
516-
__result.append([JSObject].bridgeJSLiftParameter())
517-
}
518-
__result.reverse()
519-
return __result
520-
}())
521-
for __bjs_elem_ret in ret {
522-
__bjs_elem_ret.bridgeJSLowerReturn()
523-
}
524-
_swift_js_push_i32(Int32(ret.count))
463+
let ret = processNestedJSObjectArray(_: [[JSObject]].bridgeJSLiftParameter())
464+
ret.bridgeJSLowerReturn()
525465
#else
526466
fatalError("Only available on WebAssembly")
527467
#endif

0 commit comments

Comments
 (0)