BodyFarm.h revision 243791
1243791Sdim//== BodyFarm.h - Factory for conjuring up fake bodies -------------*- C++ -*-//
2243791Sdim//
3243791Sdim//                     The LLVM Compiler Infrastructure
4243791Sdim//
5243791Sdim// This file is distributed under the University of Illinois Open Source
6243791Sdim// License. See LICENSE.TXT for details.
7243791Sdim//
8243791Sdim//===----------------------------------------------------------------------===//
9243791Sdim//
10243791Sdim// BodyFarm is a factory for creating faux implementations for functions/methods
11243791Sdim// for analysis purposes.
12243791Sdim//
13243791Sdim//===----------------------------------------------------------------------===//
14243791Sdim
15243791Sdim#ifndef LLVM_CLANG_ANALYSIS_BODYFARM_H
16243791Sdim#define LLVM_CLANG_ANALYSIS_BODYFARM_H
17243791Sdim
18243791Sdim#include "llvm/ADT/Optional.h"
19243791Sdim#include "llvm/ADT/DenseMap.h"
20243791Sdim
21243791Sdimnamespace clang {
22243791Sdim
23243791Sdimclass ASTContext;
24243791Sdimclass Decl;
25243791Sdimclass FunctionDecl;
26243791Sdimclass Stmt;
27243791Sdim
28243791Sdimclass BodyFarm {
29243791Sdimpublic:
30243791Sdim  BodyFarm(ASTContext &C) : C(C) {}
31243791Sdim
32243791Sdim  /// Factory method for creating bodies for ordinary functions.
33243791Sdim  Stmt *getBody(const FunctionDecl *D);
34243791Sdim
35243791Sdimprivate:
36243791Sdim  typedef llvm::DenseMap<const Decl *, llvm::Optional<Stmt *> > BodyMap;
37243791Sdim
38243791Sdim  ASTContext &C;
39243791Sdim  BodyMap Bodies;
40243791Sdim};
41243791Sdim}
42243791Sdim
43243791Sdim#endif
44