Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 3 additions & 15 deletions Benchmarks/Sources/Generated/BridgeJS.swift
Original file line number Diff line number Diff line change
Expand Up @@ -230,11 +230,7 @@ extension Person: _BridgedSwiftStruct {
self.name.bridgeJSStackPush()
self.age.bridgeJSStackPush()
self.address.bridgeJSStackPush()
let __bjs_isSome_email = self.email != nil
if let __bjs_unwrapped_email = self.email {
__bjs_unwrapped_email.bridgeJSStackPush()
}
_swift_js_push_i32(__bjs_isSome_email ? 1 : 0)
self.email.bridgeJSStackPush()
}

init(unsafelyCopying jsObject: JSObject) {
Expand Down Expand Up @@ -1603,11 +1599,7 @@ public func _bjs_ArrayRoundtrip_makeOptionalIntArray(_ _self: UnsafeMutableRawPo
#if arch(wasm32)
let ret = ArrayRoundtrip.bridgeJSLiftParameter(_self).makeOptionalIntArray()
for __bjs_elem_ret in ret {
let __bjs_isSome_ret_elem = __bjs_elem_ret != nil
if let __bjs_unwrapped_ret_elem = __bjs_elem_ret {
__bjs_unwrapped_ret_elem.bridgeJSStackPush()
}
_swift_js_push_i32(__bjs_isSome_ret_elem ? 1 : 0)
__bjs_elem_ret.bridgeJSStackPush()
}
_swift_js_push_i32(Int32(ret.count))
#else
Expand All @@ -1630,11 +1622,7 @@ public func _bjs_ArrayRoundtrip_roundtripOptionalIntArray(_ _self: UnsafeMutable
return __result
}())
for __bjs_elem_ret in ret {
let __bjs_isSome_ret_elem = __bjs_elem_ret != nil
if let __bjs_unwrapped_ret_elem = __bjs_elem_ret {
__bjs_unwrapped_ret_elem.bridgeJSStackPush()
}
_swift_js_push_i32(__bjs_isSome_ret_elem ? 1 : 0)
__bjs_elem_ret.bridgeJSStackPush()
}
_swift_js_push_i32(Int32(ret.count))
#else
Expand Down
54 changes: 1 addition & 53 deletions Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -824,16 +824,12 @@ struct StackCodegen {
switch type {
case .string, .int, .uint, .bool, .float, .double, .jsValue,
.jsObject(nil), .swiftHeapObject, .unsafePointer, .closure,
.caseEnum, .rawValueEnum:
.caseEnum, .rawValueEnum, .associatedValueEnum, .swiftStruct, .nullable:
return ["\(raw: accessor).bridgeJSStackPush()"]
case .jsObject(_?):
return ["\(raw: accessor).jsObject.bridgeJSStackPush()"]
case .swiftProtocol:
return ["(\(raw: accessor) as! \(raw: type.swiftType)).bridgeJSStackPush()"]
case .associatedValueEnum, .swiftStruct:
return ["\(raw: accessor).bridgeJSStackPush()"]
case .nullable(let wrappedType, _):
return lowerOptionalStatements(wrappedType: wrappedType, accessor: accessor, varPrefix: varPrefix)
case .void, .namespaceEnum:
return []
case .array(let elementType):
Expand Down Expand Up @@ -946,54 +942,6 @@ struct StackCodegen {
statements.append("_swift_js_push_i32(Int32(\(raw: accessor).count))")
return statements
}

private func lowerOptionalStatements(
wrappedType: BridgeType,
accessor: String,
varPrefix: String
) -> [CodeBlockItemSyntax] {
switch wrappedType {
case .array, .dictionary, .swiftStruct:
return ["\(raw: accessor).bridgeJSStackPush()"]
default:
break
}

var statements: [String] = []
statements.append("let __bjs_isSome_\(varPrefix) = \(accessor) != nil")
statements.append("if let __bjs_unwrapped_\(varPrefix) = \(accessor) {")

let innerStatements = lowerUnwrappedOptionalStatements(
wrappedType: wrappedType,
unwrappedVar: "__bjs_unwrapped_\(varPrefix)"
)
for stmt in innerStatements {
statements.append(stmt.description)
}

statements.append("}")
statements.append("_swift_js_push_i32(__bjs_isSome_\(varPrefix) ? 1 : 0)")
let parsed: CodeBlockItemListSyntax = "\(raw: statements.joined(separator: "\n"))"
return Array(parsed)
}

private func lowerUnwrappedOptionalStatements(
wrappedType: BridgeType,
unwrappedVar: String
) -> [CodeBlockItemSyntax] {
switch wrappedType {
case .jsObject(_?):
return ["\(raw: unwrappedVar).jsObject.bridgeJSStackPush()"]
case .swiftProtocol:
return ["(\(raw: unwrappedVar) as! \(raw: wrappedType.swiftType)).bridgeJSStackPush()"]
case .string, .int, .uint, .bool, .float, .double, .jsValue,
.jsObject(nil), .swiftHeapObject, .unsafePointer, .closure,
.caseEnum, .rawValueEnum, .associatedValueEnum:
return ["\(raw: unwrappedVar).bridgeJSStackPush()"]
default:
return ["preconditionFailure(\"BridgeJS: unsupported optional wrapped type\")"]
}
}
}

// MARK: - EnumCodegen
Expand Down
Loading