Skip to content

Commit 942523f

Browse files
committed
[interop][SwiftToCxx] NFC, refactor full _impl type printer into a function
1 parent 6f43efe commit 942523f

File tree

2 files changed

+20
-29
lines changed

2 files changed

+20
-29
lines changed

lib/PrintAsClang/PrintClangFunction.cpp

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,20 @@ ClangRepresentation DeclAndTypeClangFunctionPrinter::printFunctionSignature(
550550
return resultingRepresentation;
551551
}
552552

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+
553567
void DeclAndTypeClangFunctionPrinter::printCxxToCFunctionParameterUse(
554568
Type type, StringRef name, const ModuleDecl *moduleContext, bool isInOut,
555569
bool isIndirect, llvm::Optional<AdditionalParam::Role> paramRole) {
@@ -577,20 +591,7 @@ void DeclAndTypeClangFunctionPrinter::printCxxToCFunctionParameterUse(
577591
isIndirect || decl->isResilient() || isGenericType(type) ||
578592
interopContext.getIrABIDetails().shouldPassIndirectly(type),
579593
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); },
594595
namePrinter, isInOut,
595596
/*isSelf=*/paramRole &&
596597
*paramRole == AdditionalParam::Role::Self);
@@ -736,21 +737,7 @@ void DeclAndTypeClangFunctionPrinter::printCxxThunkBody(
736737
if (isIndirect) {
737738
valueTypePrinter.printValueTypeIndirectReturnScaffold(
738739
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); },
754741
[&](StringRef returnParam) {
755742
printCallToCFunc(/*additionalParam=*/returnParam);
756743
});

lib/PrintAsClang/PrintClangFunction.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ class DeclAndTypeClangFunctionPrinter {
158158
bool isIndirect = false,
159159
llvm::Optional<AdditionalParam::Role> paramRole = None);
160160

161+
// Print out the full type specifier that refers to the
162+
// _impl::_impl_<typename> C++ class for the given Swift type.
163+
void printTypeImplTypeSpecifier(Type type, const ModuleDecl *moduleContext);
164+
161165
bool hasKnownOptionalNullableCxxMapping(Type type);
162166

163167
raw_ostream &os;

0 commit comments

Comments
 (0)