brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · d4ce753 Raw
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