2020#include " PrintSwiftToClangCoreScaffold.h"
2121#include " SwiftToClangInteropContext.h"
2222
23+ #include " swift/AST/AttrKind.h"
2324#include " swift/AST/Decl.h"
2425#include " swift/AST/DiagnosticsSema.h"
2526#include " swift/AST/ExistentialLayout.h"
@@ -1151,35 +1152,43 @@ class ModuleWriter {
11511152};
11521153} // end anonymous namespace
11531154
1154- static AccessLevel getRequiredAccess (const ModuleDecl &M) {
1155+ static AccessLevel getRequiredAccess (const ModuleDecl &M,
1156+ std::optional<AccessLevel> minAccess) {
1157+ if (minAccess)
1158+ return *minAccess;
11551159 return M.isExternallyConsumed () ? AccessLevel::Public : AccessLevel::Internal;
11561160}
11571161
11581162void swift::printModuleContentsAsObjC (
11591163 raw_ostream &os, llvm::SmallPtrSetImpl<ImportModuleTy> &imports,
1160- ModuleDecl &M, SwiftToClangInteropContext &interopContext) {
1164+ ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1165+ std::optional<AccessLevel> minAccess) {
11611166 llvm::raw_null_ostream prologueOS;
11621167 llvm::StringSet<> exposedModules;
1163- ModuleWriter (os, prologueOS, imports, M, interopContext, getRequiredAccess (M),
1168+ ModuleWriter (os, prologueOS, imports, M, interopContext,
1169+ getRequiredAccess (M, minAccess),
11641170 /* requiresExposedAttribute=*/ false , exposedModules,
11651171 OutputLanguageMode::ObjC)
11661172 .write ();
11671173}
11681174
11691175void swift::printModuleContentsAsC (
11701176 raw_ostream &os, llvm::SmallPtrSetImpl<ImportModuleTy> &imports,
1171- ModuleDecl &M, SwiftToClangInteropContext &interopContext) {
1177+ ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1178+ std::optional<AccessLevel> minAccess) {
11721179 llvm::raw_null_ostream prologueOS;
11731180 llvm::StringSet<> exposedModules;
1174- ModuleWriter (os, prologueOS, imports, M, interopContext, getRequiredAccess (M),
1181+ ModuleWriter (os, prologueOS, imports, M, interopContext,
1182+ getRequiredAccess (M, minAccess),
11751183 /* requiresExposedAttribute=*/ false , exposedModules,
11761184 OutputLanguageMode::C)
11771185 .write ();
11781186}
11791187
11801188EmittedClangHeaderDependencyInfo swift::printModuleContentsAsCxx (
11811189 raw_ostream &os, ModuleDecl &M, SwiftToClangInteropContext &interopContext,
1182- bool requiresExposedAttribute, llvm::StringSet<> &exposedModules) {
1190+ AccessLevel minAccess, bool requiresExposedAttribute,
1191+ llvm::StringSet<> &exposedModules) {
11831192 std::string moduleContentsBuf;
11841193 llvm::raw_string_ostream moduleOS{moduleContentsBuf};
11851194 std::string modulePrologueBuf;
@@ -1197,8 +1206,8 @@ EmittedClangHeaderDependencyInfo swift::printModuleContentsAsCxx(
11971206
11981207 // FIXME: Use getRequiredAccess once @expose is supported.
11991208 ModuleWriter writer (moduleOS, prologueOS, info.imports , M, interopContext,
1200- AccessLevel::Public , requiresExposedAttribute,
1201- exposedModules, OutputLanguageMode::Cxx);
1209+ minAccess , requiresExposedAttribute, exposedModules ,
1210+ OutputLanguageMode::Cxx);
12021211 writer.write ();
12031212 info.dependsOnStandardLibrary = writer.isStdlibRequired ();
12041213 if (M.isStdlibModule ()) {
0 commit comments