1226586Sdim//==- ProgramPoint.cpp - Program Points for Path-Sensitive Analysis -*- C++ -*-/
2226586Sdim//
3226586Sdim//                     The LLVM Compiler Infrastructure
4226586Sdim//
5226586Sdim// This file is distributed under the University of Illinois Open Source
6226586Sdim// License. See LICENSE.TXT for details.
7226586Sdim//
8226586Sdim//===----------------------------------------------------------------------===//
9226586Sdim//
10226586Sdim//  This file defines the interface ProgramPoint, which identifies a
11226586Sdim//  distinct location in a function.
12226586Sdim//
13226586Sdim//===----------------------------------------------------------------------===//
14226586Sdim
15226586Sdim#include "clang/Analysis/ProgramPoint.h"
16226586Sdim
17226586Sdimusing namespace clang;
18226586Sdim
19226586SdimProgramPointTag::~ProgramPointTag() {}
20226586Sdim
21226586SdimProgramPoint ProgramPoint::getProgramPoint(const Stmt *S, ProgramPoint::Kind K,
22226586Sdim                                           const LocationContext *LC,
23226586Sdim                                           const ProgramPointTag *tag){
24226586Sdim  switch (K) {
25226586Sdim    default:
26226586Sdim      llvm_unreachable("Unhandled ProgramPoint kind");
27226586Sdim    case ProgramPoint::PreStmtKind:
28226586Sdim      return PreStmt(S, LC, tag);
29226586Sdim    case ProgramPoint::PostStmtKind:
30226586Sdim      return PostStmt(S, LC, tag);
31226586Sdim    case ProgramPoint::PreLoadKind:
32226586Sdim      return PreLoad(S, LC, tag);
33226586Sdim    case ProgramPoint::PostLoadKind:
34226586Sdim      return PostLoad(S, LC, tag);
35226586Sdim    case ProgramPoint::PreStoreKind:
36226586Sdim      return PreStore(S, LC, tag);
37226586Sdim    case ProgramPoint::PostLValueKind:
38226586Sdim      return PostLValue(S, LC, tag);
39239462Sdim    case ProgramPoint::PostStmtPurgeDeadSymbolsKind:
40239462Sdim      return PostStmtPurgeDeadSymbols(S, LC, tag);
41239462Sdim    case ProgramPoint::PreStmtPurgeDeadSymbolsKind:
42239462Sdim      return PreStmtPurgeDeadSymbols(S, LC, tag);
43226586Sdim  }
44226586Sdim}
45226586Sdim
46226586SdimSimpleProgramPointTag::SimpleProgramPointTag(StringRef description)
47226586Sdim  : desc(description) {}
48226586Sdim
49226586SdimStringRef SimpleProgramPointTag::getTagDescription() const {
50226586Sdim  return desc;
51226586Sdim}
52