Skip to content

Commit 1646876

Browse files
committed
BridgeJS: Add importParams, NilSentinel, sentinel-based optional lowering, and collapse liftExpression
1 parent 3e66088 commit 1646876

File tree

9 files changed

+310
-309
lines changed

9 files changed

+310
-309
lines changed

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -717,13 +717,8 @@ struct StackCodegen {
717717
/// - Returns: An ExprSyntax representing the lift expression
718718
func liftExpression(for type: BridgeType) -> ExprSyntax {
719719
switch type {
720-
case .string, .int, .uint, .bool, .float, .double,
721-
.jsObject(nil), .jsValue, .swiftStruct, .swiftHeapObject, .unsafePointer,
722-
.swiftProtocol, .caseEnum, .associatedValueEnum, .rawValueEnum:
723-
return "\(raw: type.swiftType).bridgeJSLiftParameter()"
724720
case .jsObject(let className?):
725721
return "\(raw: className)(unsafelyWrapping: JSObject.bridgeJSLiftParameter())"
726-
727722
case .nullable(let wrappedType, let kind):
728723
return liftNullableExpression(wrappedType: wrappedType, kind: kind)
729724
case .array(let elementType):
@@ -734,6 +729,8 @@ struct StackCodegen {
734729
return "JSObject.bridgeJSLiftParameter()"
735730
case .void, .namespaceEnum:
736731
return "()"
732+
default:
733+
return "\(raw: type.swiftType).bridgeJSLiftParameter()"
737734
}
738735
}
739736

@@ -804,14 +801,10 @@ struct StackCodegen {
804801
private func liftNullableExpression(wrappedType: BridgeType, kind: JSOptionalKind) -> ExprSyntax {
805802
let typeName = kind == .null ? "Optional" : "JSUndefinedOr"
806803
switch wrappedType {
807-
case .string, .int, .uint, .bool, .float, .double, .jsObject(nil), .jsValue,
808-
.swiftStruct, .swiftHeapObject, .caseEnum, .associatedValueEnum, .rawValueEnum,
809-
.array, .dictionary:
810-
return "\(raw: typeName)<\(raw: wrappedType.swiftType)>.bridgeJSLiftParameter()"
811-
case .jsObject(let className?):
804+
case .jsObject(let className?) where className != "JSObject":
812805
return "\(raw: typeName)<JSObject>.bridgeJSLiftParameter().map { \(raw: className)(unsafelyWrapping: $0) }"
813-
case .nullable, .void, .namespaceEnum, .closure, .unsafePointer, .swiftProtocol:
814-
fatalError("Invalid nullable wrapped type: \(wrappedType)")
806+
default:
807+
return "\(raw: typeName)<\(raw: wrappedType.swiftType)>.bridgeJSLiftParameter()"
815808
}
816809
}
817810

Plugins/BridgeJS/Sources/BridgeJSCore/ImportTS.swift

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -714,25 +714,10 @@ extension BridgeType {
714714
}
715715
fallthrough
716716
default:
717-
return try loweringParameterInfoForNonOptional(context: context)
717+
return LoweringParameterInfo(loweredParameters: descriptor.importParams)
718718
}
719719
}
720720

721-
private func loweringParameterInfoForNonOptional(context: BridgeContext) throws -> LoweringParameterInfo {
722-
switch self {
723-
case .swiftStruct where context == .importTS:
724-
return LoweringParameterInfo(loweredParameters: [("objectId", .i32)])
725-
case .string:
726-
return LoweringParameterInfo(loweredParameters: [("value", .i32)])
727-
case .rawValueEnum(_, .string):
728-
return LoweringParameterInfo(loweredParameters: [("value", .i32)])
729-
default:
730-
break
731-
}
732-
733-
return LoweringParameterInfo(loweredParameters: descriptor.wasmParams)
734-
}
735-
736721
struct LiftingReturnInfo {
737722
let valueToLift: WasmCoreType?
738723
}
@@ -754,20 +739,8 @@ extension BridgeType {
754739
}
755740
fallthrough
756741
default:
757-
return liftingReturnInfoForNonOptional(context: context)
758-
}
759-
}
760-
761-
private func liftingReturnInfoForNonOptional(context: BridgeContext) -> LiftingReturnInfo {
762-
if context == .importTS {
763-
switch self {
764-
case .swiftStruct:
765-
return LiftingReturnInfo(valueToLift: .i32)
766-
default:
767-
break
768-
}
742+
return LiftingReturnInfo(valueToLift: descriptor.importReturnType)
769743
}
770-
return LiftingReturnInfo(valueToLift: descriptor.importReturnType)
771744
}
772745
}
773746

Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,15 +1534,7 @@ public struct BridgeJSLink {
15341534
let enumValuesName = enumDefinition.valuesName
15351535

15361536
switch enumDefinition.enumType {
1537-
case .simple:
1538-
let fragment = IntrinsicJSFragment.caseEnumHelper(enumDefinition: enumDefinition)
1539-
_ = try fragment.printCode([enumValuesName], context)
1540-
jsTopLevelLines.append(contentsOf: printer.lines)
1541-
case .rawValue:
1542-
guard enumDefinition.rawType != nil else {
1543-
throw BridgeJSLinkError(message: "Raw value enum \(enumDefinition.name) is missing rawType")
1544-
}
1545-
1537+
case .simple, .rawValue:
15461538
let fragment = IntrinsicJSFragment.caseEnumHelper(enumDefinition: enumDefinition)
15471539
_ = try fragment.printCode([enumValuesName], context)
15481540
jsTopLevelLines.append(contentsOf: printer.lines)

0 commit comments

Comments
 (0)