1 //== BodyFarm.h - Factory for conjuring up fake bodies -------------*- 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 // BodyFarm is a factory for creating faux implementations for functions/methods 11 // for analysis purposes. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_ANALYSIS_BODYFARM_H 16 #define LLVM_CLANG_ANALYSIS_BODYFARM_H 17 18 #include "clang/Basic/LLVM.h" 19 #include "llvm/ADT/DenseMap.h" 20 #include "llvm/ADT/Optional.h" 21 22 namespace clang { 23 24 class ASTContext; 25 class Decl; 26 class FunctionDecl; 27 class ObjCMethodDecl; 28 class ObjCPropertyDecl; 29 class Stmt; 30 31 class BodyFarm { 32 public: BodyFarm(ASTContext & C)33 BodyFarm(ASTContext &C) : C(C) {} 34 35 /// Factory method for creating bodies for ordinary functions. 36 Stmt *getBody(const FunctionDecl *D); 37 38 /// Factory method for creating bodies for Objective-C properties. 39 Stmt *getBody(const ObjCMethodDecl *D); 40 41 private: 42 typedef llvm::DenseMap<const Decl *, Optional<Stmt *> > BodyMap; 43 44 ASTContext &C; 45 BodyMap Bodies; 46 }; 47 } 48 49 #endif 50