@@ -31,26 +31,26 @@ using namespace swift;
3131TypeRefinementContext::TypeRefinementContext (ASTContext &Ctx, IntroNode Node,
3232 TypeRefinementContext *Parent,
3333 SourceRange SrcRange,
34- const AvailabilityRange & Info)
34+ const AvailabilityContext * Info)
3535 : Node(Node), SrcRange(SrcRange), AvailabilityInfo(Info) {
3636 if (Parent) {
3737 assert (SrcRange.isValid ());
3838 Parent->addChild (this , Ctx);
39- assert (Info.isContainedIn (Parent->getAvailabilityInfo ()));
39+ assert (Info->getPlatformRange ().isContainedIn (
40+ Parent->getPlatformAvailabilityRange ()));
4041 }
4142 Ctx.addDestructorCleanup (Children);
4243}
4344
4445TypeRefinementContext *
4546TypeRefinementContext::createForSourceFile (SourceFile *SF,
46- const AvailabilityRange & Info) {
47+ const AvailabilityContext * Info) {
4748 assert (SF);
4849
4950 ASTContext &Ctx = SF->getASTContext ();
5051
5152 SourceRange range;
5253 TypeRefinementContext *parentContext = nullptr ;
53- AvailabilityRange availabilityRange = Info;
5454 switch (SF->Kind ) {
5555 case SourceFileKind::MacroExpansion:
5656 case SourceFileKind::DefaultArgument: {
@@ -63,8 +63,6 @@ TypeRefinementContext::createForSourceFile(SourceFile *SF,
6363 auto originalNode = SF->getNodeInEnclosingSourceFile ();
6464 parentContext =
6565 parentTRC->findMostRefinedSubContext (originalNode.getStartLoc (), Ctx);
66- if (parentContext)
67- availabilityRange = parentContext->getAvailabilityInfo ();
6866 }
6967 break ;
7068 }
@@ -76,21 +74,22 @@ TypeRefinementContext::createForSourceFile(SourceFile *SF,
7674 llvm_unreachable (" unexpected SourceFileKind" );
7775 }
7876
79- return new (Ctx)
80- TypeRefinementContext (Ctx, SF, parentContext, range, availabilityRange);
77+ return new (Ctx) TypeRefinementContext (
78+ Ctx, SF, parentContext, range,
79+ parentContext ? parentContext->getAvailabilityContext () : Info);
8180}
8281
8382TypeRefinementContext *TypeRefinementContext::createForDecl (
8483 ASTContext &Ctx, Decl *D, TypeRefinementContext *Parent,
85- const AvailabilityRange & Info, SourceRange SrcRange) {
84+ const AvailabilityContext * Info, SourceRange SrcRange) {
8685 assert (D);
8786 assert (Parent);
8887 return new (Ctx) TypeRefinementContext (Ctx, D, Parent, SrcRange, Info);
8988}
9089
9190TypeRefinementContext *TypeRefinementContext::createForDeclImplicit (
9291 ASTContext &Ctx, Decl *D, TypeRefinementContext *Parent,
93- const AvailabilityRange & Info, SourceRange SrcRange) {
92+ const AvailabilityContext * Info, SourceRange SrcRange) {
9493 assert (D);
9594 assert (Parent);
9695 return new (Ctx) TypeRefinementContext (
@@ -100,7 +99,7 @@ TypeRefinementContext *TypeRefinementContext::createForDeclImplicit(
10099TypeRefinementContext *
101100TypeRefinementContext::createForIfStmtThen (ASTContext &Ctx, IfStmt *S,
102101 TypeRefinementContext *Parent,
103- const AvailabilityRange & Info) {
102+ const AvailabilityContext * Info) {
104103 assert (S);
105104 assert (Parent);
106105 return new (Ctx)
@@ -111,7 +110,7 @@ TypeRefinementContext::createForIfStmtThen(ASTContext &Ctx, IfStmt *S,
111110TypeRefinementContext *
112111TypeRefinementContext::createForIfStmtElse (ASTContext &Ctx, IfStmt *S,
113112 TypeRefinementContext *Parent,
114- const AvailabilityRange & Info) {
113+ const AvailabilityContext * Info) {
115114 assert (S);
116115 assert (Parent);
117116 return new (Ctx)
@@ -122,7 +121,7 @@ TypeRefinementContext::createForIfStmtElse(ASTContext &Ctx, IfStmt *S,
122121TypeRefinementContext *TypeRefinementContext::createForConditionFollowingQuery (
123122 ASTContext &Ctx, PoundAvailableInfo *PAI,
124123 const StmtConditionElement &LastElement, TypeRefinementContext *Parent,
125- const AvailabilityRange & Info) {
124+ const AvailabilityContext * Info) {
126125 assert (PAI);
127126 assert (Parent);
128127 SourceRange Range (PAI->getEndLoc (), LastElement.getEndLoc ());
@@ -131,7 +130,7 @@ TypeRefinementContext *TypeRefinementContext::createForConditionFollowingQuery(
131130
132131TypeRefinementContext *TypeRefinementContext::createForGuardStmtFallthrough (
133132 ASTContext &Ctx, GuardStmt *RS, BraceStmt *ContainingBraceStmt,
134- TypeRefinementContext *Parent, const AvailabilityRange & Info) {
133+ TypeRefinementContext *Parent, const AvailabilityContext * Info) {
135134 assert (RS);
136135 assert (ContainingBraceStmt);
137136 assert (Parent);
@@ -143,7 +142,7 @@ TypeRefinementContext *TypeRefinementContext::createForGuardStmtFallthrough(
143142TypeRefinementContext *
144143TypeRefinementContext::createForGuardStmtElse (ASTContext &Ctx, GuardStmt *RS,
145144 TypeRefinementContext *Parent,
146- const AvailabilityRange & Info) {
145+ const AvailabilityContext * Info) {
147146 assert (RS);
148147 assert (Parent);
149148 return new (Ctx)
@@ -154,7 +153,7 @@ TypeRefinementContext::createForGuardStmtElse(ASTContext &Ctx, GuardStmt *RS,
154153TypeRefinementContext *
155154TypeRefinementContext::createForWhileStmtBody (ASTContext &Ctx, WhileStmt *S,
156155 TypeRefinementContext *Parent,
157- const AvailabilityRange & Info) {
156+ const AvailabilityContext * Info) {
158157 assert (S);
159158 assert (Parent);
160159 return new (Ctx) TypeRefinementContext (Ctx, S, Parent,
@@ -380,7 +379,7 @@ TypeRefinementContext::getExplicitAvailabilityRange() const {
380379 case Reason::GuardStmtElseBranch:
381380 case Reason::WhileStmtBody:
382381 // Availability is inherently explicit for all of these nodes.
383- return getAvailabilityInfo ();
382+ return getPlatformAvailabilityRange ();
384383 }
385384
386385 llvm_unreachable (" Unhandled Reason in switch." );
@@ -401,7 +400,7 @@ void TypeRefinementContext::print(raw_ostream &OS, SourceManager &SrcMgr,
401400 OS.indent (Indent);
402401 OS << " (" << getReasonName (getReason ());
403402
404- OS << " version=" << stringForAvailability (AvailabilityInfo );
403+ OS << " version=" << stringForAvailability (getPlatformAvailabilityRange () );
405404
406405 if (getReason () == Reason::Decl || getReason () == Reason::DeclImplicit) {
407406 Decl *D = Node.getAsDecl ();
@@ -582,7 +581,8 @@ void TypeRefinementContext::verify(const TypeRefinementContext *parent,
582581 {{" child" , this }, {" parent" , parent}});
583582 }
584583
585- if (!AvailabilityInfo.isContainedIn (parent->AvailabilityInfo ))
584+ if (!getPlatformAvailabilityRange ().isContainedIn (
585+ parent->getPlatformAvailabilityRange ()))
586586 verificationError (ctx, " child availability range not contained" ,
587587 {{" child" , this }, {" parent" , parent}});
588588}
0 commit comments