1//== BodyFarm.h - Factory for conjuring up fake bodies -------------*- C++ -*-// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// BodyFarm is a factory for creating faux implementations for functions/methods 10// for analysis purposes. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_CLANG_ANALYSIS_BODYFARM_H 15#define LLVM_CLANG_ANALYSIS_BODYFARM_H 16 17#include "clang/AST/DeclBase.h" 18#include "clang/Basic/LLVM.h" 19#include "llvm/ADT/DenseMap.h" 20#include <optional> 21 22namespace clang { 23 24class ASTContext; 25class FunctionDecl; 26class ObjCMethodDecl; 27class Stmt; 28class CodeInjector; 29 30class BodyFarm { 31public: 32 BodyFarm(ASTContext &C, CodeInjector *injector) : C(C), Injector(injector) {} 33 34 /// Factory method for creating bodies for ordinary functions. 35 Stmt *getBody(const FunctionDecl *D); 36 37 /// Factory method for creating bodies for Objective-C properties. 38 Stmt *getBody(const ObjCMethodDecl *D); 39 40 /// Remove copy constructor to avoid accidental copying. 41 BodyFarm(const BodyFarm &other) = delete; 42 43 /// Delete copy assignment operator. 44 BodyFarm &operator=(const BodyFarm &other) = delete; 45 46private: 47 typedef llvm::DenseMap<const Decl *, std::optional<Stmt *>> BodyMap; 48 49 ASTContext &C; 50 BodyMap Bodies; 51 CodeInjector *Injector; 52}; 53} // namespace clang 54 55#endif 56