1*67e74705SXin Li //== BodyFarm.h - Factory for conjuring up fake bodies -------------*- C++ -*-// 2*67e74705SXin Li // 3*67e74705SXin Li // The LLVM Compiler Infrastructure 4*67e74705SXin Li // 5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source 6*67e74705SXin Li // License. See LICENSE.TXT for details. 7*67e74705SXin Li // 8*67e74705SXin Li //===----------------------------------------------------------------------===// 9*67e74705SXin Li // 10*67e74705SXin Li // BodyFarm is a factory for creating faux implementations for functions/methods 11*67e74705SXin Li // for analysis purposes. 12*67e74705SXin Li // 13*67e74705SXin Li //===----------------------------------------------------------------------===// 14*67e74705SXin Li 15*67e74705SXin Li #ifndef LLVM_CLANG_LIB_ANALYSIS_BODYFARM_H 16*67e74705SXin Li #define LLVM_CLANG_LIB_ANALYSIS_BODYFARM_H 17*67e74705SXin Li 18*67e74705SXin Li #include "clang/AST/DeclBase.h" 19*67e74705SXin Li #include "clang/Basic/LLVM.h" 20*67e74705SXin Li #include "llvm/ADT/DenseMap.h" 21*67e74705SXin Li #include "llvm/ADT/Optional.h" 22*67e74705SXin Li 23*67e74705SXin Li namespace clang { 24*67e74705SXin Li 25*67e74705SXin Li class ASTContext; 26*67e74705SXin Li class FunctionDecl; 27*67e74705SXin Li class ObjCMethodDecl; 28*67e74705SXin Li class ObjCPropertyDecl; 29*67e74705SXin Li class Stmt; 30*67e74705SXin Li class CodeInjector; 31*67e74705SXin Li 32*67e74705SXin Li class BodyFarm { 33*67e74705SXin Li public: BodyFarm(ASTContext & C,CodeInjector * injector)34*67e74705SXin Li BodyFarm(ASTContext &C, CodeInjector *injector) : C(C), Injector(injector) {} 35*67e74705SXin Li 36*67e74705SXin Li /// Factory method for creating bodies for ordinary functions. 37*67e74705SXin Li Stmt *getBody(const FunctionDecl *D); 38*67e74705SXin Li 39*67e74705SXin Li /// Factory method for creating bodies for Objective-C properties. 40*67e74705SXin Li Stmt *getBody(const ObjCMethodDecl *D); 41*67e74705SXin Li 42*67e74705SXin Li private: 43*67e74705SXin Li typedef llvm::DenseMap<const Decl *, Optional<Stmt *> > BodyMap; 44*67e74705SXin Li 45*67e74705SXin Li ASTContext &C; 46*67e74705SXin Li BodyMap Bodies; 47*67e74705SXin Li CodeInjector *Injector; 48*67e74705SXin Li }; 49*67e74705SXin Li } 50*67e74705SXin Li 51*67e74705SXin Li #endif 52