@@ -274,6 +274,14 @@ DeclContext *DeclContext::getParentForLookup() const {
274274 return getParent ();
275275}
276276
277+ PackageUnit *DeclContext::getParentModulePackage () const {
278+ auto parentModule = getParentModule ();
279+ auto pkg = parentModule->getParent ();
280+ if (pkg)
281+ return const_cast <PackageUnit *>(cast<PackageUnit>(pkg));
282+ return nullptr ;
283+ }
284+
277285ModuleDecl *DeclContext::getParentModule () const {
278286 const DeclContext *DC = this ;
279287 while (!DC->isModuleContext ())
@@ -306,6 +314,7 @@ SourceFile *DeclContext::getParentSourceFile() const {
306314 case DeclContextKind::Initializer:
307315 case DeclContextKind::FileUnit:
308316 case DeclContextKind::Module:
317+ case DeclContextKind::Package:
309318 case DeclContextKind::SerializedLocal:
310319 break ;
311320 }
@@ -559,6 +568,8 @@ bool DeclContext::canBeParentOfExtension() const {
559568
560569bool DeclContext::walkContext (ASTWalker &Walker) {
561570 switch (getContextKind ()) {
571+ case DeclContextKind::Package:
572+ return false ;
562573 case DeclContextKind::Module:
563574 return cast<ModuleDecl>(this )->walk (Walker);
564575 case DeclContextKind::FileUnit:
@@ -652,6 +663,7 @@ unsigned DeclContext::printContext(raw_ostream &OS, const unsigned indent,
652663
653664 const char *Kind;
654665 switch (getContextKind ()) {
666+ case DeclContextKind::Package: Kind = " Package" ; break ;
655667 case DeclContextKind::Module: Kind = " Module" ; break ;
656668 case DeclContextKind::FileUnit: Kind = " FileUnit" ; break ;
657669 case DeclContextKind::SerializedLocal: Kind = " Serialized Local" ; break ;
@@ -678,6 +690,9 @@ unsigned DeclContext::printContext(raw_ostream &OS, const unsigned indent,
678690 OS.indent (Depth*2 + indent) << (void *)this << " " << Kind;
679691
680692 switch (getContextKind ()) {
693+ case DeclContextKind::Package:
694+ OS << " name=" << cast<PackageUnit>(this )->getName ();
695+ break ;
681696 case DeclContextKind::Module:
682697 OS << " name=" << cast<ModuleDecl>(this )->getName ();
683698 break ;
@@ -1206,7 +1221,7 @@ AccessScope::AccessScope(const DeclContext *DC, AccessLimitKind limitKind)
12061221 Value.setPointer (DC);
12071222 isPrivate = true ;
12081223 }
1209- if (!DC || isa<ModuleDecl>(DC))
1224+ if (!DC || isa<ModuleDecl>(DC) || isa<PackageUnit>(DC) )
12101225 assert (!isPrivate && " public, package, or internal scope can't be private" );
12111226}
12121227
@@ -1285,6 +1300,8 @@ DeclContextKind DeclContext::getContextKind() const {
12851300 return DeclContextKind::SerializedLocal;
12861301 case ASTHierarchy::FileUnit:
12871302 return DeclContextKind::FileUnit;
1303+ case ASTHierarchy::Package:
1304+ return DeclContextKind::Package;
12881305 case ASTHierarchy::Decl: {
12891306 auto decl = reinterpret_cast <const Decl*>(this + 1 );
12901307 if (isa<AbstractFunctionDecl>(decl))
@@ -1334,6 +1351,7 @@ bool DeclContext::isAsyncContext() const {
13341351 case DeclContextKind::EnumElementDecl:
13351352 case DeclContextKind::ExtensionDecl:
13361353 case DeclContextKind::SerializedLocal:
1354+ case DeclContextKind::Package:
13371355 case DeclContextKind::Module:
13381356 case DeclContextKind::GenericTypeDecl:
13391357 case DeclContextKind::MacroDecl:
@@ -1361,6 +1379,7 @@ bool DeclContext::isAsyncContext() const {
13611379
13621380SourceLoc swift::extractNearestSourceLoc (const DeclContext *dc) {
13631381 switch (dc->getContextKind ()) {
1382+ case DeclContextKind::Package:
13641383 case DeclContextKind::Module:
13651384 return SourceLoc ();
13661385 case DeclContextKind::AbstractFunctionDecl:
0 commit comments