CleanupLocation CleanupLocation::get(SILLocation L) { if (Expr *E = L.getAsASTNode<Expr>()) return CleanupLocation(E, L.getSpecialFlags()); if (Stmt *S = L.getAsASTNode<Stmt>()) return CleanupLocation(S, L.getSpecialFlags()); if (Pattern *P = L.getAsASTNode<Pattern>()) return CleanupLocation(P, L.getSpecialFlags()); if (Decl *D = L.getAsASTNode<Decl>()) return CleanupLocation(D, L.getSpecialFlags()); if (L.isNull()) return CleanupLocation(); if (L.isSILFile()) return CleanupLocation(); llvm_unreachable("Cannot construct Cleanup loc from the " "given location."); }
void swift::printSILLocationDescription(llvm::raw_ostream &out, SILLocation loc, ASTContext &Context) { if (loc.isNull()) { out << "<<invalid location>>"; } else if (loc.isSILFile()) { printSourceLocDescription(out, loc.getSourceLoc(), Context); } else if (auto decl = loc.getAsASTNode<Decl>()) { printDeclDescription(out, decl, Context); } else if (auto expr = loc.getAsASTNode<Expr>()) { printExprDescription(out, expr, Context); } else if (auto stmt = loc.getAsASTNode<Stmt>()) { printStmtDescription(out, stmt, Context); } else if (auto pattern = loc.castToASTNode<Pattern>()) { printPatternDescription(out, pattern, Context); } }
MandatoryInlinedLocation MandatoryInlinedLocation::getMandatoryInlinedLocation(SILLocation L) { if (Expr *E = L.getAsASTNode<Expr>()) return MandatoryInlinedLocation(E, L.getSpecialFlags()); if (Stmt *S = L.getAsASTNode<Stmt>()) return MandatoryInlinedLocation(S, L.getSpecialFlags()); if (Pattern *P = L.getAsASTNode<Pattern>()) return MandatoryInlinedLocation(P, L.getSpecialFlags()); if (Decl *D = L.getAsASTNode<Decl>()) return MandatoryInlinedLocation(D, L.getSpecialFlags()); if (L.isSILFile()) return MandatoryInlinedLocation(L.Loc.SILFileLoc, L.getSpecialFlags()); if (L.isInTopLevel()) return MandatoryInlinedLocation::getModuleLocation(L.getSpecialFlags()); llvm_unreachable("Cannot construct Inlined loc from the given location."); }