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
18249423Sdim#include "clang/Basic/LLVM.h"
19249423Sdim#include "llvm/ADT/DenseMap.h"
20243791Sdim#include "llvm/ADT/Optional.h"
21243791Sdim
22243791Sdimnamespace clang {
23243791Sdim
24243791Sdimclass ASTContext;
25243791Sdimclass Decl;
26243791Sdimclass FunctionDecl;
27243791Sdimclass Stmt;
28243791Sdim
29243791Sdimclass BodyFarm {
30243791Sdimpublic:
31243791Sdim  BodyFarm(ASTContext &C) : C(C) {}
32243791Sdim
33243791Sdim  /// Factory method for creating bodies for ordinary functions.
34243791Sdim  Stmt *getBody(const FunctionDecl *D);
35243791Sdim
36243791Sdimprivate:
37249423Sdim  typedef llvm::DenseMap<const Decl *, Optional<Stmt *> > BodyMap;
38243791Sdim
39243791Sdim  ASTContext &C;
40243791Sdim  BodyMap Bodies;
41243791Sdim};
42243791Sdim}
43243791Sdim
44243791Sdim#endif
45