TypeRefinementContext::TypeRefinementContext(ASTContext &Ctx, IntroNode Node, TypeRefinementContext *Parent, SourceRange SrcRange, const AvailabilityContext &Info) : Node(Node), SrcRange(SrcRange), AvailabilityInfo(Info) { if (Parent) { assert(SrcRange.isValid()); Parent->addChild(this); assert(Info.isContainedIn(Parent->getAvailabilityInfo())); } Ctx.addDestructorCleanup(Children); }