@@ -794,8 +794,10 @@ struct StackCodegen {
794794 func liftExpression( for type: BridgeType ) -> ExprSyntax {
795795 switch type {
796796 case . string, . int, . uint, . bool, . float, . double,
797- . jsObject, . swiftStruct, . swiftHeapObject:
797+ . jsObject( nil ) , . swiftStruct, . swiftHeapObject:
798798 return " \( raw: type. swiftType) .bridgeJSLiftParameter() "
799+ case . jsObject( let className? ) :
800+ return " \( raw: className) (unsafelyWrapping: JSObject.bridgeJSLiftParameter()) "
799801 case . unsafePointer:
800802 return " \( raw: type. swiftType) .bridgeJSLiftParameter() "
801803 case . swiftProtocol( let protocolName) :
@@ -830,9 +832,11 @@ struct StackCodegen {
830832 func liftArrayExpression( elementType: BridgeType ) -> ExprSyntax {
831833 switch elementType {
832834 case . int, . uint, . float, . double, . string, . bool,
833- . jsObject, . swiftStruct, . caseEnum, . swiftHeapObject,
835+ . jsObject( nil ) , . swiftStruct, . caseEnum, . swiftHeapObject,
834836 . unsafePointer, . rawValueEnum, . associatedValueEnum:
835837 return " [ \( raw: elementType. swiftType) ].bridgeJSLiftParameter() "
838+ case . jsObject( _? ) :
839+ return liftArrayExpressionInline ( elementType: elementType)
836840 case . swiftProtocol( let protocolName) :
837841 return " [Any \( raw: protocolName) ].bridgeJSLiftParameter() "
838842 case . optional, . array, . closure:
@@ -861,9 +865,11 @@ struct StackCodegen {
861865
862866 private func liftOptionalExpression( wrappedType: BridgeType ) -> ExprSyntax {
863867 switch wrappedType {
864- case . string, . int, . uint, . bool, . float, . double, . jsObject,
868+ case . string, . int, . uint, . bool, . float, . double, . jsObject( nil ) ,
865869 . swiftStruct, . swiftHeapObject, . caseEnum, . associatedValueEnum, . rawValueEnum:
866870 return " Optional< \( raw: wrappedType. swiftType) >.bridgeJSLiftParameter() "
871+ case . jsObject( let className? ) :
872+ return " Optional<JSObject>.bridgeJSLiftParameter().map { \( raw: className) (unsafelyWrapping: $0) } "
867873 case . array( let elementType) :
868874 let arrayLift = liftArrayExpression ( elementType: elementType)
869875 let swiftTypeName = elementType. swiftType
@@ -896,8 +902,10 @@ struct StackCodegen {
896902 switch type {
897903 case . string, . int, . uint, . bool, . float, . double:
898904 return [ " \( raw: accessor) .bridgeJSLowerStackReturn() " ]
899- case . jsObject:
905+ case . jsObject( nil ) :
900906 return [ " \( raw: accessor) .bridgeJSLowerStackReturn() " ]
907+ case . jsObject( _? ) :
908+ return [ " \( raw: accessor) .jsObject.bridgeJSLowerStackReturn() " ]
901909 case . swiftHeapObject, . unsafePointer, . closure:
902910 return [ " \( raw: accessor) .bridgeJSLowerStackReturn() " ]
903911 case . swiftProtocol( let protocolName) :
@@ -923,9 +931,11 @@ struct StackCodegen {
923931 ) -> [ CodeBlockItemSyntax ] {
924932 switch elementType {
925933 case . int, . uint, . float, . double, . string, . bool,
926- . jsObject, . swiftStruct, . caseEnum, . swiftHeapObject,
934+ . jsObject( nil ) , . swiftStruct, . caseEnum, . swiftHeapObject,
927935 . unsafePointer, . rawValueEnum, . associatedValueEnum:
928936 return [ " \( raw: accessor) .bridgeJSLowerReturn() " ]
937+ case . jsObject( _? ) :
938+ return [ " \( raw: accessor) .map { $0.jsObject }.bridgeJSLowerReturn() " ]
929939 case . swiftProtocol( let protocolName) :
930940 return [ " \( raw: accessor) .map { $0 as! Any \( raw: protocolName) }.bridgeJSLowerReturn() " ]
931941 case . optional, . array, . closure:
@@ -1003,8 +1013,10 @@ struct StackCodegen {
10031013 case . associatedValueEnum:
10041014 // Push payloads via bridgeJSLowerParameter(), then push the returned case ID
10051015 return [ " _swift_js_push_i32( \( raw: unwrappedVar) .bridgeJSLowerParameter()) " ]
1006- case . jsObject:
1016+ case . jsObject( nil ) :
10071017 return [ " \( raw: unwrappedVar) .bridgeJSLowerStackReturn() " ]
1018+ case . jsObject( _? ) :
1019+ return [ " \( raw: unwrappedVar) .jsObject.bridgeJSLowerStackReturn() " ]
10081020 case . array( let elementType) :
10091021 return lowerArrayStatements ( elementType: elementType, accessor: unwrappedVar, varPrefix: varPrefix)
10101022 default :
0 commit comments