@@ -31,26 +31,26 @@ using namespace swift;
31
31
TypeRefinementContext::TypeRefinementContext (ASTContext &Ctx, IntroNode Node,
32
32
TypeRefinementContext *Parent,
33
33
SourceRange SrcRange,
34
- const AvailabilityRange & Info)
34
+ const AvailabilityContext * Info)
35
35
: Node(Node), SrcRange(SrcRange), AvailabilityInfo(Info) {
36
36
if (Parent) {
37
37
assert (SrcRange.isValid ());
38
38
Parent->addChild (this , Ctx);
39
- assert (Info.isContainedIn (Parent->getAvailabilityInfo ()));
39
+ assert (Info->getPlatformRange ().isContainedIn (
40
+ Parent->getPlatformAvailabilityRange ()));
40
41
}
41
42
Ctx.addDestructorCleanup (Children);
42
43
}
43
44
44
45
TypeRefinementContext *
45
46
TypeRefinementContext::createForSourceFile (SourceFile *SF,
46
- const AvailabilityRange & Info) {
47
+ const AvailabilityContext * Info) {
47
48
assert (SF);
48
49
49
50
ASTContext &Ctx = SF->getASTContext ();
50
51
51
52
SourceRange range;
52
53
TypeRefinementContext *parentContext = nullptr ;
53
- AvailabilityRange availabilityRange = Info;
54
54
switch (SF->Kind ) {
55
55
case SourceFileKind::MacroExpansion:
56
56
case SourceFileKind::DefaultArgument: {
@@ -63,8 +63,6 @@ TypeRefinementContext::createForSourceFile(SourceFile *SF,
63
63
auto originalNode = SF->getNodeInEnclosingSourceFile ();
64
64
parentContext =
65
65
parentTRC->findMostRefinedSubContext (originalNode.getStartLoc (), Ctx);
66
- if (parentContext)
67
- availabilityRange = parentContext->getAvailabilityInfo ();
68
66
}
69
67
break ;
70
68
}
@@ -76,21 +74,22 @@ TypeRefinementContext::createForSourceFile(SourceFile *SF,
76
74
llvm_unreachable (" unexpected SourceFileKind" );
77
75
}
78
76
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);
81
80
}
82
81
83
82
TypeRefinementContext *TypeRefinementContext::createForDecl (
84
83
ASTContext &Ctx, Decl *D, TypeRefinementContext *Parent,
85
- const AvailabilityRange & Info, SourceRange SrcRange) {
84
+ const AvailabilityContext * Info, SourceRange SrcRange) {
86
85
assert (D);
87
86
assert (Parent);
88
87
return new (Ctx) TypeRefinementContext (Ctx, D, Parent, SrcRange, Info);
89
88
}
90
89
91
90
TypeRefinementContext *TypeRefinementContext::createForDeclImplicit (
92
91
ASTContext &Ctx, Decl *D, TypeRefinementContext *Parent,
93
- const AvailabilityRange & Info, SourceRange SrcRange) {
92
+ const AvailabilityContext * Info, SourceRange SrcRange) {
94
93
assert (D);
95
94
assert (Parent);
96
95
return new (Ctx) TypeRefinementContext (
@@ -100,7 +99,7 @@ TypeRefinementContext *TypeRefinementContext::createForDeclImplicit(
100
99
TypeRefinementContext *
101
100
TypeRefinementContext::createForIfStmtThen (ASTContext &Ctx, IfStmt *S,
102
101
TypeRefinementContext *Parent,
103
- const AvailabilityRange & Info) {
102
+ const AvailabilityContext * Info) {
104
103
assert (S);
105
104
assert (Parent);
106
105
return new (Ctx)
@@ -111,7 +110,7 @@ TypeRefinementContext::createForIfStmtThen(ASTContext &Ctx, IfStmt *S,
111
110
TypeRefinementContext *
112
111
TypeRefinementContext::createForIfStmtElse (ASTContext &Ctx, IfStmt *S,
113
112
TypeRefinementContext *Parent,
114
- const AvailabilityRange & Info) {
113
+ const AvailabilityContext * Info) {
115
114
assert (S);
116
115
assert (Parent);
117
116
return new (Ctx)
@@ -122,7 +121,7 @@ TypeRefinementContext::createForIfStmtElse(ASTContext &Ctx, IfStmt *S,
122
121
TypeRefinementContext *TypeRefinementContext::createForConditionFollowingQuery (
123
122
ASTContext &Ctx, PoundAvailableInfo *PAI,
124
123
const StmtConditionElement &LastElement, TypeRefinementContext *Parent,
125
- const AvailabilityRange & Info) {
124
+ const AvailabilityContext * Info) {
126
125
assert (PAI);
127
126
assert (Parent);
128
127
SourceRange Range (PAI->getEndLoc (), LastElement.getEndLoc ());
@@ -131,7 +130,7 @@ TypeRefinementContext *TypeRefinementContext::createForConditionFollowingQuery(
131
130
132
131
TypeRefinementContext *TypeRefinementContext::createForGuardStmtFallthrough (
133
132
ASTContext &Ctx, GuardStmt *RS, BraceStmt *ContainingBraceStmt,
134
- TypeRefinementContext *Parent, const AvailabilityRange & Info) {
133
+ TypeRefinementContext *Parent, const AvailabilityContext * Info) {
135
134
assert (RS);
136
135
assert (ContainingBraceStmt);
137
136
assert (Parent);
@@ -143,7 +142,7 @@ TypeRefinementContext *TypeRefinementContext::createForGuardStmtFallthrough(
143
142
TypeRefinementContext *
144
143
TypeRefinementContext::createForGuardStmtElse (ASTContext &Ctx, GuardStmt *RS,
145
144
TypeRefinementContext *Parent,
146
- const AvailabilityRange & Info) {
145
+ const AvailabilityContext * Info) {
147
146
assert (RS);
148
147
assert (Parent);
149
148
return new (Ctx)
@@ -154,7 +153,7 @@ TypeRefinementContext::createForGuardStmtElse(ASTContext &Ctx, GuardStmt *RS,
154
153
TypeRefinementContext *
155
154
TypeRefinementContext::createForWhileStmtBody (ASTContext &Ctx, WhileStmt *S,
156
155
TypeRefinementContext *Parent,
157
- const AvailabilityRange & Info) {
156
+ const AvailabilityContext * Info) {
158
157
assert (S);
159
158
assert (Parent);
160
159
return new (Ctx) TypeRefinementContext (Ctx, S, Parent,
@@ -380,7 +379,7 @@ TypeRefinementContext::getExplicitAvailabilityRange() const {
380
379
case Reason::GuardStmtElseBranch:
381
380
case Reason::WhileStmtBody:
382
381
// Availability is inherently explicit for all of these nodes.
383
- return getAvailabilityInfo ();
382
+ return getPlatformAvailabilityRange ();
384
383
}
385
384
386
385
llvm_unreachable (" Unhandled Reason in switch." );
@@ -401,7 +400,7 @@ void TypeRefinementContext::print(raw_ostream &OS, SourceManager &SrcMgr,
401
400
OS.indent (Indent);
402
401
OS << " (" << getReasonName (getReason ());
403
402
404
- OS << " version=" << stringForAvailability (AvailabilityInfo );
403
+ OS << " version=" << stringForAvailability (getPlatformAvailabilityRange () );
405
404
406
405
if (getReason () == Reason::Decl || getReason () == Reason::DeclImplicit) {
407
406
Decl *D = Node.getAsDecl ();
@@ -582,7 +581,8 @@ void TypeRefinementContext::verify(const TypeRefinementContext *parent,
582
581
{{" child" , this }, {" parent" , parent}});
583
582
}
584
583
585
- if (!AvailabilityInfo.isContainedIn (parent->AvailabilityInfo ))
584
+ if (!getPlatformAvailabilityRange ().isContainedIn (
585
+ parent->getPlatformAvailabilityRange ()))
586
586
verificationError (ctx, " child availability range not contained" ,
587
587
{{" child" , this }, {" parent" , parent}});
588
588
}
0 commit comments