xref: /aosp_15_r20/external/clang/lib/Analysis/BodyFarm.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
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