@@ -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