3939#include " swift/Parse/Lexer.h"
4040#include " swift/Parse/Parser.h"
4141
42+ #include " SwiftToClangInteropContext.h"
4243#include " clang/AST/ASTContext.h"
4344#include " clang/AST/Attr.h"
4445#include " clang/AST/Decl.h"
4546#include " clang/AST/DeclObjC.h"
4647#include " clang/Basic/CharInfo.h"
4748#include " clang/Basic/SourceManager.h"
48- #include " SwiftToClangInteropContext .h"
49+ #include " llvm/Support/raw_ostream .h"
4950
5051using namespace swift ;
5152using namespace swift ::objc_translation;
@@ -561,8 +562,8 @@ class DeclAndTypePrinter::Implementation
561562 outOfLineOS << " return swift::" ;
562563 outOfLineOS << cxx_synthesis::getCxxImplNamespaceName ();
563564 outOfLineOS << " ::implClassFor<" ;
564- outOfLineSyntaxPrinter. printNominalTypeReference (
565- objectTypeDecl ,
565+ owningPrinter. printTypeName (
566+ outOfLineOS, paramType ,
566567 elementDecl->getParentEnum ()->getModuleContext ());
567568 outOfLineOS << " >::type" ;
568569 if (!isOptional && isa<ClassDecl>(objectTypeDecl)) {
@@ -574,8 +575,8 @@ class DeclAndTypePrinter::Implementation
574575 outOfLineOS << " swift::"
575576 << cxx_synthesis::getCxxImplNamespaceName ();
576577 outOfLineOS << " ::implClassFor<" ;
577- outOfLineSyntaxPrinter. printNominalTypeReference (
578- objectTypeDecl ,
578+ owningPrinter. printTypeName (
579+ outOfLineOS, paramType ,
579580 elementDecl->getParentEnum ()->getModuleContext ());
580581 outOfLineOS << " >::type" ;
581582 outOfLineOS << " ::initializeWithTake(result, "
@@ -729,31 +730,36 @@ class DeclAndTypePrinter::Implementation
729730 objectTypeDecl =
730731 paramType->getNominalOrBoundGenericNominal ();
731732 outOfLineOS << " alignas(" ;
732- outOfLineSyntaxPrinter.printNominalTypeReference (
733- objectTypeDecl, ED->getModuleContext ());
733+ owningPrinter.printTypeName (
734+ outOfLineOS, paramType,
735+ elementDecl->getParentEnum ()->getModuleContext ());
734736 outOfLineOS << " ) unsigned char buffer[sizeof(" ;
735- outOfLineSyntaxPrinter.printNominalTypeReference (
736- objectTypeDecl, ED->getModuleContext ());
737+ owningPrinter.printTypeName (
738+ outOfLineOS, paramType,
739+ elementDecl->getParentEnum ()->getModuleContext ());
737740 outOfLineOS << " )];\n " ;
738741 outOfLineOS << " auto *valCopy = new(buffer) " ;
739- outOfLineSyntaxPrinter.printNominalTypeReference (
740- objectTypeDecl, ED->getModuleContext ());
742+ owningPrinter.printTypeName (
743+ outOfLineOS, paramType,
744+ elementDecl->getParentEnum ()->getModuleContext ());
741745 outOfLineOS << " (val);\n " ;
742746 outOfLineOS << " " ;
743747 outOfLineOS << cxx_synthesis::getCxxSwiftNamespaceName ()
744748 << " ::" ;
745749 outOfLineOS << cxx_synthesis::getCxxImplNamespaceName ();
746750 outOfLineOS << " ::implClassFor<" ;
747- outOfLineSyntaxPrinter.printNominalTypeReference (
748- objectTypeDecl, ED->getModuleContext ());
751+ owningPrinter.printTypeName (
752+ outOfLineOS, paramType,
753+ elementDecl->getParentEnum ()->getModuleContext ());
749754 outOfLineOS << " >::type::initializeWithTake(result._"
750755 " getOpaquePointer(), " ;
751756 outOfLineOS << cxx_synthesis::getCxxSwiftNamespaceName ()
752757 << " ::" ;
753758 outOfLineOS << cxx_synthesis::getCxxImplNamespaceName ();
754759 outOfLineOS << " ::implClassFor<" ;
755- outOfLineSyntaxPrinter.printNominalTypeReference (
756- objectTypeDecl, ED->getModuleContext ());
760+ owningPrinter.printTypeName (
761+ outOfLineOS, paramType,
762+ elementDecl->getParentEnum ()->getModuleContext ());
757763 outOfLineOS << " >::type::getOpaquePointer(*valCopy)" ;
758764 outOfLineOS << " );\n " ;
759765 }
@@ -2958,6 +2964,15 @@ void DeclAndTypePrinter::print(Type ty) {
29582964 getImpl ().print (ty, /* overridingOptionality*/ std::nullopt );
29592965}
29602966
2967+ void DeclAndTypePrinter::printTypeName (raw_ostream &os, Type ty,
2968+ const ModuleDecl *moduleContext) {
2969+ std::string dummy;
2970+ llvm::raw_string_ostream dummyOS (dummy);
2971+ DeclAndTypeClangFunctionPrinter printer (os, dummyOS, typeMapping,
2972+ interopContext, *this );
2973+ printer.printTypeName (ty, moduleContext);
2974+ }
2975+
29612976void DeclAndTypePrinter::printAvailability (raw_ostream &os, const Decl *D) {
29622977 getImpl ().printAvailability (os, D);
29632978}
0 commit comments