@@ -131,6 +131,10 @@ static void addCppExtensionsToStdlibType(const NominalTypeDecl *typeDecl,
131131 cPrologueOS << " SWIFT_EXTERN void *_Nonnull "
132132 " $sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF(swift_interop_stub_"
133133 " Swift_String) SWIFT_NOEXCEPT SWIFT_CALL;\n " ;
134+ cPrologueOS << " SWIFT_EXTERN swift_interop_stub_Swift_String "
135+ " $sSS10FoundationE36_"
136+ " unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ("
137+ " void * _Nullable) SWIFT_NOEXCEPT SWIFT_CALL;\n " ;
134138 printer.printObjCBlock ([](raw_ostream &os) {
135139 os << " " ;
136140 ClangSyntaxPrinter (os).printInlineForThunk ();
@@ -139,6 +143,17 @@ static void addCppExtensionsToStdlibType(const NominalTypeDecl *typeDecl,
139143 " *)(_impl::$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF(_impl::swift_interop_"
140144 " passDirect_Swift_String(_getOpaquePointer())));\n " ;
141145 os << " }\n " ;
146+ os << " static " ;
147+ ClangSyntaxPrinter (os).printInlineForThunk ();
148+ os << " String init(NSString * _Nonnull nsString) noexcept {\n " ;
149+ os << " auto result = _make();\n " ;
150+ os << " auto res = "
151+ " _impl::$sSS10FoundationE36_"
152+ " unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ((__bridge "
153+ " void *)nsString);\n " ;
154+ os << " memcpy(result._getOpaquePointer(), &res, sizeof(res));\n " ;
155+ os << " return result;\n " ;
156+ os << " }\n " ;
142157 });
143158 } else if (typeDecl == typeDecl->getASTContext ().getOptionalDecl ()) {
144159 // Add additional methods for the `Optional` declaration.
0 commit comments