@@ -550,6 +550,20 @@ ClangRepresentation DeclAndTypeClangFunctionPrinter::printFunctionSignature(
550
550
return resultingRepresentation;
551
551
}
552
552
553
+ void DeclAndTypeClangFunctionPrinter::printTypeImplTypeSpecifier (
554
+ Type type, const ModuleDecl *moduleContext) {
555
+ CFunctionSignatureTypePrinterModifierDelegate delegate;
556
+ delegate.mapValueTypeUseKind = [](ClangValueTypePrinter::TypeUseKind kind) {
557
+ return ClangValueTypePrinter::TypeUseKind::CxxImplTypeName;
558
+ };
559
+ CFunctionSignatureTypePrinter typePrinter (
560
+ os, cPrologueOS, typeMapping, OutputLanguageMode::Cxx, interopContext,
561
+ delegate, moduleContext, declPrinter,
562
+ FunctionSignatureTypeUse::TypeReference);
563
+ auto result = typePrinter.visit (type, None, /* isInOut=*/ false );
564
+ assert (!result.isUnsupported ());
565
+ }
566
+
553
567
void DeclAndTypeClangFunctionPrinter::printCxxToCFunctionParameterUse (
554
568
Type type, StringRef name, const ModuleDecl *moduleContext, bool isInOut,
555
569
bool isIndirect, llvm::Optional<AdditionalParam::Role> paramRole) {
@@ -577,20 +591,7 @@ void DeclAndTypeClangFunctionPrinter::printCxxToCFunctionParameterUse(
577
591
isIndirect || decl->isResilient () || isGenericType (type) ||
578
592
interopContext.getIrABIDetails ().shouldPassIndirectly (type),
579
593
decl, moduleContext,
580
- [&]() {
581
- CFunctionSignatureTypePrinterModifierDelegate delegate;
582
- delegate.mapValueTypeUseKind = [](ClangValueTypePrinter::
583
- TypeUseKind kind) {
584
- return ClangValueTypePrinter::TypeUseKind::CxxImplTypeName;
585
- };
586
- CFunctionSignatureTypePrinter typePrinter (
587
- os, cPrologueOS, typeMapping, OutputLanguageMode::Cxx,
588
- interopContext, delegate, moduleContext, declPrinter,
589
- FunctionSignatureTypeUse::TypeReference);
590
- auto result =
591
- typePrinter.visit (type, None, /* isInOut=*/ false );
592
- assert (!result.isUnsupported ());
593
- },
594
+ [&]() { printTypeImplTypeSpecifier (type, moduleContext); },
594
595
namePrinter, isInOut,
595
596
/* isSelf=*/ paramRole &&
596
597
*paramRole == AdditionalParam::Role::Self);
@@ -736,21 +737,7 @@ void DeclAndTypeClangFunctionPrinter::printCxxThunkBody(
736
737
if (isIndirect) {
737
738
valueTypePrinter.printValueTypeIndirectReturnScaffold (
738
739
decl, moduleContext,
739
- [&]() {
740
- CFunctionSignatureTypePrinterModifierDelegate delegate;
741
- delegate
742
- .mapValueTypeUseKind = [](ClangValueTypePrinter::TypeUseKind
743
- kind) {
744
- return ClangValueTypePrinter::TypeUseKind::CxxImplTypeName;
745
- };
746
- CFunctionSignatureTypePrinter typePrinter (
747
- os, cPrologueOS, typeMapping, OutputLanguageMode::Cxx,
748
- interopContext, delegate, moduleContext, declPrinter,
749
- FunctionSignatureTypeUse::TypeReference);
750
- auto result =
751
- typePrinter.visit (resultTy, None, /* isInOut=*/ false );
752
- assert (!result.isUnsupported ());
753
- },
740
+ [&]() { printTypeImplTypeSpecifier (resultTy, moduleContext); },
754
741
[&](StringRef returnParam) {
755
742
printCallToCFunc (/* additionalParam=*/ returnParam);
756
743
});
0 commit comments