54 lines · cpp
1//===--- Source.cpp - Source expression tracking ----------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "Source.h"10#include "clang/AST/Expr.h"11 12using namespace clang;13using namespace clang::interp;14 15SourceLocation SourceInfo::getLoc() const {16 if (const Expr *E = asExpr())17 return E->getExprLoc();18 if (const Stmt *S = asStmt())19 return S->getBeginLoc();20 if (const Decl *D = asDecl())21 return D->getBeginLoc();22 return SourceLocation();23}24 25SourceRange SourceInfo::getRange() const {26 if (const Expr *E = asExpr())27 return E->getSourceRange();28 if (const Stmt *S = asStmt())29 return S->getSourceRange();30 if (const Decl *D = asDecl())31 return D->getSourceRange();32 return SourceRange();33}34 35const Expr *SourceInfo::asExpr() const {36 if (const auto *S = dyn_cast_if_present<const Stmt *>(Source))37 return dyn_cast<Expr>(S);38 return nullptr;39}40 41const Expr *SourceMapper::getExpr(const Function *F, CodePtr PC) const {42 if (const Expr *E = getSource(F, PC).asExpr())43 return E;44 return nullptr;45}46 47SourceLocation SourceMapper::getLocation(const Function *F, CodePtr PC) const {48 return getSource(F, PC).getLoc();49}50 51SourceRange SourceMapper::getRange(const Function *F, CodePtr PC) const {52 return getSource(F, PC).getRange();53}54