@@ -86,12 +86,12 @@ ExportContext::ExportContext(DeclContext *DC,
8686 AvailabilityContext availability,
8787 FragileFunctionKind kind,
8888 llvm::SmallVectorImpl<UnsafeUse> *unsafeUses,
89- bool spi, bool exported,
89+ bool spi, ExportedLevel exported,
9090 bool implicit)
9191 : DC(DC), Availability(availability), FragileKind(kind),
9292 UnsafeUses(unsafeUses) {
9393 SPI = spi;
94- Exported = exported;
94+ Exported = unsigned ( exported) ;
9595 Implicit = implicit;
9696 Reason = unsigned (ExportabilityReason::General);
9797}
@@ -178,7 +178,7 @@ ExportContext ExportContext::forDeclSignature(Decl *D) {
178178 computeExportContextBits (Ctx, D, &spi, &implicit);
179179 });
180180
181- bool exported = ::isExported (D) != ExportedLevel::None ;
181+ ExportedLevel exported = ::isExported (D);
182182
183183 return ExportContext (DC, availabilityContext, fragileKind, nullptr ,
184184 spi, exported, implicit);
@@ -194,7 +194,7 @@ ExportContext ExportContext::forFunctionBody(DeclContext *DC, SourceLoc loc) {
194194 forEachOuterDecl (
195195 DC, [&](Decl *D) { computeExportContextBits (Ctx, D, &spi, &implicit); });
196196
197- bool exported = false ;
197+ ExportedLevel exported = ExportedLevel::None ;
198198
199199 return ExportContext (DC, availabilityContext, fragileKind, nullptr ,
200200 spi, exported, implicit);
@@ -205,8 +205,9 @@ ExportContext ExportContext::forConformance(DeclContext *DC,
205205 assert (isa<ExtensionDecl>(DC) || isa<NominalTypeDecl>(DC));
206206 auto where = forDeclSignature (DC->getInnermostDeclarationDeclContext ());
207207
208- where.Exported &= proto->getFormalAccessScope (
209- DC, /* usableFromInlineAsPublic*/ true ).isPublic ();
208+ if (!proto->getFormalAccessScope (
209+ DC, /* usableFromInlineAsPublic*/ true ).isPublic ())
210+ where.Exported = unsigned (ExportedLevel::None);
210211
211212 return where;
212213}
@@ -219,7 +220,7 @@ ExportContext ExportContext::withReason(ExportabilityReason reason) const {
219220
220221ExportContext ExportContext::withExported (bool exported) const {
221222 auto copy = *this ;
222- copy.Exported = isExported () && exported ;
223+ copy.Exported = exported ? Exported : unsigned (ExportedLevel::None) ;
223224 return copy;
224225}
225226
0 commit comments