@@ -28,8 +28,10 @@ using namespace swift;
2828TypeRefinementContext::TypeRefinementContext (ASTContext &Ctx, IntroNode Node,
2929 TypeRefinementContext *Parent,
3030 SourceRange SrcRange,
31- const AvailabilityContext &Info)
32- : Node(Node), SrcRange(SrcRange), AvailabilityInfo(Info) {
31+ const AvailabilityContext &Info,
32+ const AvailabilityContext &ExplicitInfo)
33+ : Node(Node), SrcRange(SrcRange),
34+ AvailabilityInfo(Info), ExplicitAvailabilityInfo(ExplicitInfo) {
3335 if (Parent) {
3436 assert (SrcRange.isValid ());
3537 Parent->addChild (this );
@@ -46,18 +48,20 @@ TypeRefinementContext::createRoot(SourceFile *SF,
4648 ASTContext &Ctx = SF->getASTContext ();
4749 return new (Ctx)
4850 TypeRefinementContext (Ctx, SF,
49- /* Parent=*/ nullptr , SourceRange (), Info);
51+ /* Parent=*/ nullptr , SourceRange (),
52+ Info, AvailabilityContext::alwaysAvailable ());
5053}
5154
5255TypeRefinementContext *
5356TypeRefinementContext::createForDecl (ASTContext &Ctx, Decl *D,
5457 TypeRefinementContext *Parent,
5558 const AvailabilityContext &Info,
59+ const AvailabilityContext &ExplicitInfo,
5660 SourceRange SrcRange) {
5761 assert (D);
5862 assert (Parent);
5963 return new (Ctx)
60- TypeRefinementContext (Ctx, D, Parent, SrcRange, Info);
64+ TypeRefinementContext (Ctx, D, Parent, SrcRange, Info, ExplicitInfo );
6165}
6266
6367TypeRefinementContext *
@@ -68,7 +72,8 @@ TypeRefinementContext::createForIfStmtThen(ASTContext &Ctx, IfStmt *S,
6872 assert (Parent);
6973 return new (Ctx)
7074 TypeRefinementContext (Ctx, IntroNode (S, /* IsThen=*/ true ), Parent,
71- S->getThenStmt ()->getSourceRange (), Info);
75+ S->getThenStmt ()->getSourceRange (),
76+ Info, /* ExplicitInfo */ Info);
7277}
7378
7479TypeRefinementContext *
@@ -79,7 +84,8 @@ TypeRefinementContext::createForIfStmtElse(ASTContext &Ctx, IfStmt *S,
7984 assert (Parent);
8085 return new (Ctx)
8186 TypeRefinementContext (Ctx, IntroNode (S, /* IsThen=*/ false ), Parent,
82- S->getElseStmt ()->getSourceRange (), Info);
87+ S->getElseStmt ()->getSourceRange (),
88+ Info, /* ExplicitInfo */ Info);
8389}
8490
8591TypeRefinementContext *
@@ -92,7 +98,7 @@ TypeRefinementContext::createForConditionFollowingQuery(ASTContext &Ctx,
9298 assert (Parent);
9399 SourceRange Range (PAI->getEndLoc (), LastElement.getEndLoc ());
94100 return new (Ctx) TypeRefinementContext (Ctx, PAI, Parent, Range,
95- Info);
101+ Info, /* ExplicitInfo */ Info );
96102}
97103
98104TypeRefinementContext *
@@ -107,7 +113,7 @@ TypeRefinementContext::createForGuardStmtFallthrough(ASTContext &Ctx,
107113 SourceRange Range (RS->getEndLoc (), ContainingBraceStmt->getEndLoc ());
108114 return new (Ctx) TypeRefinementContext (Ctx,
109115 IntroNode (RS, /* IsFallthrough=*/ true ),
110- Parent, Range, Info);
116+ Parent, Range, Info, /* ExplicitInfo */ Info );
111117}
112118
113119TypeRefinementContext *
@@ -118,7 +124,7 @@ TypeRefinementContext::createForGuardStmtElse(ASTContext &Ctx, GuardStmt *RS,
118124 assert (Parent);
119125 return new (Ctx)
120126 TypeRefinementContext (Ctx, IntroNode (RS, /* IsFallthrough=*/ false ), Parent,
121- RS->getBody ()->getSourceRange (), Info);
127+ RS->getBody ()->getSourceRange (), Info, /* ExplicitInfo */ Info );
122128}
123129
124130TypeRefinementContext *
@@ -128,7 +134,7 @@ TypeRefinementContext::createForWhileStmtBody(ASTContext &Ctx, WhileStmt *S,
128134 assert (S);
129135 assert (Parent);
130136 return new (Ctx) TypeRefinementContext (
131- Ctx, S, Parent, S->getBody ()->getSourceRange (), Info);
137+ Ctx, S, Parent, S->getBody ()->getSourceRange (), Info, /* ExplicitInfo */ Info );
132138}
133139
134140// Only allow allocation of TypeRefinementContext using the allocator in
0 commit comments