blob: bdda0e6eed341f84b5e7e28f9a230b32f6919b0b [file] [log] [blame]
Ted Kremenekd70d0b02008-02-16 01:12:31 +00001//== SymbolManager.h - Management of Symbolic Values ------------*- C++ -*--==//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This files defines SymbolManager, a class that manages symbolic values
11// created for use by GRExprEngine and related classes.
12//
13//===----------------------------------------------------------------------===//
14
15#include "clang/Analysis/PathSensitive/SymbolManager.h"
16
17using namespace clang;
18
19SymbolID SymbolManager::getSymbol(ParmVarDecl* D) {
20 SymbolID& X = DataToSymbol[getKey(D)];
21
22 if (!X.isInitialized()) {
23 X = SymbolToData.size();
24 SymbolToData.push_back(SymbolDataParmVar(D));
25 }
26
27 return X;
28}
29
30SymbolID SymbolManager::getContentsOfSymbol(SymbolID sym) {
31 SymbolID& X = DataToSymbol[getKey(sym)];
32
33 if (!X.isInitialized()) {
34 X = SymbolToData.size();
35 SymbolToData.push_back(SymbolDataContentsOf(sym));
36 }
37
38 return X;
39}
40
41QualType SymbolData::getType() const {
42 switch (getKind()) {
43 default:
44 assert (false && "getType() not implemented for this symbol.");
45
46 case ParmKind:
47 return cast<SymbolDataParmVar>(this)->getDecl()->getType();
48
49 }
50}
51
52SymbolManager::SymbolManager() {}
53SymbolManager::~SymbolManager() {}