retdec
visitor.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_SUPPORT_VISITOR_H
8 #define RETDEC_LLVMIR2HLL_SUPPORT_VISITOR_H
9 
11 
12 namespace retdec {
13 namespace llvmir2hll {
14 
15 class AddOpExpr;
16 class AddressOpExpr;
17 class AndOpExpr;
18 class ArrayIndexOpExpr;
19 class ArrayType;
20 class AssignOpExpr;
21 class AssignStmt;
22 class BitAndOpExpr;
23 class BitCastExpr;
24 class BitOrOpExpr;
25 class BitShlOpExpr;
26 class BitShrOpExpr;
27 class BitXorOpExpr;
28 class BreakStmt;
29 class CallExpr;
30 class CallStmt;
31 class CommaOpExpr;
32 class ConstArray;
33 class ConstBool;
34 class ConstFloat;
35 class ConstInt;
36 class ConstNullPointer;
37 class ConstString;
38 class ConstStruct;
39 class ConstSymbol;
40 class ContinueStmt;
41 class DerefOpExpr;
42 class DivOpExpr;
43 class EmptyStmt;
44 class EqOpExpr;
45 class Expression;
46 class ExtCastExpr;
47 class FPToIntCastExpr;
48 class FloatConst;
49 class FloatType;
50 class ForLoopStmt;
51 class Function;
52 class FunctionType;
53 class GlobalVarDef;
54 class GotoStmt;
55 class GtEqOpExpr;
56 class GtOpExpr;
57 class IfStmt;
58 class IntToFPCastExpr;
59 class IntToPtrCastExpr;
60 class IntType;
61 class LtEqOpExpr;
62 class LtOpExpr;
63 class ModOpExpr;
64 class Module;
65 class MulOpExpr;
66 class NegOpExpr;
67 class NeqOpExpr;
68 class NotOpExpr;
69 class OrOpExpr;
70 class PointerType;
71 class PtrToIntCastExpr;
72 class ReturnStmt;
73 class Statement;
74 class StringType;
75 class StructIndexOpExpr;
76 class StructType;
77 class SubOpExpr;
78 class SwitchStmt;
79 class TernaryOpExpr;
80 class TruncCastExpr;
81 class UForLoopStmt;
82 class UnknownType;
83 class UnreachableStmt;
84 class VarDefStmt;
85 class Variable;
86 class VoidType;
87 class WhileLoopStmt;
88 
95 class Visitor {
96 public:
97  virtual ~Visitor() = default;
98 
99  virtual void visit(ShPtr<GlobalVarDef> varDef) = 0;
100  virtual void visit(ShPtr<Function> func) = 0;
101  // Statements
102  virtual void visit(ShPtr<AssignStmt> stmt) = 0;
103  virtual void visit(ShPtr<BreakStmt> stmt) = 0;
104  virtual void visit(ShPtr<CallStmt> stmt) = 0;
105  virtual void visit(ShPtr<ContinueStmt> stmt) = 0;
106  virtual void visit(ShPtr<EmptyStmt> stmt) = 0;
107  virtual void visit(ShPtr<ForLoopStmt> stmt) = 0;
108  virtual void visit(ShPtr<UForLoopStmt> stmt) = 0;
109  virtual void visit(ShPtr<GotoStmt> stmt) = 0;
110  virtual void visit(ShPtr<IfStmt> stmt) = 0;
111  virtual void visit(ShPtr<ReturnStmt> stmt) = 0;
112  virtual void visit(ShPtr<SwitchStmt> stmt) = 0;
113  virtual void visit(ShPtr<UnreachableStmt> stmt) = 0;
114  virtual void visit(ShPtr<VarDefStmt> stmt) = 0;
115  virtual void visit(ShPtr<WhileLoopStmt> stmt) = 0;
116  // Expressions
117  virtual void visit(ShPtr<AddOpExpr> expr) = 0;
118  virtual void visit(ShPtr<AddressOpExpr> expr) = 0;
119  virtual void visit(ShPtr<AndOpExpr> expr) = 0;
120  virtual void visit(ShPtr<ArrayIndexOpExpr> expr) = 0;
121  virtual void visit(ShPtr<AssignOpExpr> expr) = 0;
122  virtual void visit(ShPtr<BitAndOpExpr> expr) = 0;
123  virtual void visit(ShPtr<BitOrOpExpr> expr) = 0;
124  virtual void visit(ShPtr<BitShlOpExpr> expr) = 0;
125  virtual void visit(ShPtr<BitShrOpExpr> expr) = 0;
126  virtual void visit(ShPtr<BitXorOpExpr> expr) = 0;
127  virtual void visit(ShPtr<CallExpr> expr) = 0;
128  virtual void visit(ShPtr<CommaOpExpr> expr) = 0;
129  virtual void visit(ShPtr<DerefOpExpr> expr) = 0;
130  virtual void visit(ShPtr<DivOpExpr> expr) = 0;
131  virtual void visit(ShPtr<EqOpExpr> expr) = 0;
132  virtual void visit(ShPtr<GtEqOpExpr> expr) = 0;
133  virtual void visit(ShPtr<GtOpExpr> expr) = 0;
134  virtual void visit(ShPtr<LtEqOpExpr> expr) = 0;
135  virtual void visit(ShPtr<LtOpExpr> expr) = 0;
136  virtual void visit(ShPtr<ModOpExpr> expr) = 0;
137  virtual void visit(ShPtr<MulOpExpr> expr) = 0;
138  virtual void visit(ShPtr<NegOpExpr> expr) = 0;
139  virtual void visit(ShPtr<NeqOpExpr> expr) = 0;
140  virtual void visit(ShPtr<NotOpExpr> expr) = 0;
141  virtual void visit(ShPtr<OrOpExpr> expr) = 0;
142  virtual void visit(ShPtr<StructIndexOpExpr> expr) = 0;
143  virtual void visit(ShPtr<SubOpExpr> expr) = 0;
144  virtual void visit(ShPtr<TernaryOpExpr> expr) = 0;
145  virtual void visit(ShPtr<Variable> var) = 0;
146  // Casts
147  virtual void visit(ShPtr<BitCastExpr> expr) = 0;
148  virtual void visit(ShPtr<ExtCastExpr> expr) = 0;
149  virtual void visit(ShPtr<FPToIntCastExpr> expr) = 0;
150  virtual void visit(ShPtr<IntToFPCastExpr> expr) = 0;
151  virtual void visit(ShPtr<IntToPtrCastExpr> expr) = 0;
152  virtual void visit(ShPtr<PtrToIntCastExpr> expr) = 0;
153  virtual void visit(ShPtr<TruncCastExpr> expr) = 0;
154  // Constants
155  virtual void visit(ShPtr<ConstArray> constant) = 0;
156  virtual void visit(ShPtr<ConstBool> constant) = 0;
157  virtual void visit(ShPtr<ConstFloat> constant) = 0;
158  virtual void visit(ShPtr<ConstInt> constant) = 0;
159  virtual void visit(ShPtr<ConstNullPointer> constant) = 0;
160  virtual void visit(ShPtr<ConstString> constant) = 0;
161  virtual void visit(ShPtr<ConstStruct> constant) = 0;
162  virtual void visit(ShPtr<ConstSymbol> constant) = 0;
163  // Types
164  virtual void visit(ShPtr<ArrayType> type) = 0;
165  virtual void visit(ShPtr<FloatType> type) = 0;
166  virtual void visit(ShPtr<IntType> type) = 0;
167  virtual void visit(ShPtr<PointerType> type) = 0;
168  virtual void visit(ShPtr<StringType> type) = 0;
169  virtual void visit(ShPtr<StructType> type) = 0;
170  virtual void visit(ShPtr<FunctionType> type) = 0;
171  virtual void visit(ShPtr<VoidType> type) = 0;
172  virtual void visit(ShPtr<UnknownType> type) = 0;
173 
174 protected:
175  Visitor() = default;
176 };
177 
178 } // namespace llvmir2hll
179 } // namespace retdec
180 
181 #endif
A base class of all visitors.
Definition: visitor.h:95
virtual void visit(ShPtr< NegOpExpr > expr)=0
virtual void visit(ShPtr< UnreachableStmt > stmt)=0
virtual ~Visitor()=default
virtual void visit(ShPtr< LtOpExpr > expr)=0
virtual void visit(ShPtr< ConstFloat > constant)=0
virtual void visit(ShPtr< ReturnStmt > stmt)=0
virtual void visit(ShPtr< StructType > type)=0
virtual void visit(ShPtr< DerefOpExpr > expr)=0
virtual void visit(ShPtr< MulOpExpr > expr)=0
virtual void visit(ShPtr< VarDefStmt > stmt)=0
virtual void visit(ShPtr< FunctionType > type)=0
virtual void visit(ShPtr< ConstString > constant)=0
virtual void visit(ShPtr< ConstSymbol > constant)=0
virtual void visit(ShPtr< IntType > type)=0
virtual void visit(ShPtr< BitShrOpExpr > expr)=0
virtual void visit(ShPtr< AssignStmt > stmt)=0
virtual void visit(ShPtr< IntToFPCastExpr > expr)=0
virtual void visit(ShPtr< AddOpExpr > expr)=0
virtual void visit(ShPtr< BitXorOpExpr > expr)=0
virtual void visit(ShPtr< IfStmt > stmt)=0
virtual void visit(ShPtr< DivOpExpr > expr)=0
virtual void visit(ShPtr< SwitchStmt > stmt)=0
virtual void visit(ShPtr< BitCastExpr > expr)=0
virtual void visit(ShPtr< ConstStruct > constant)=0
virtual void visit(ShPtr< StructIndexOpExpr > expr)=0
virtual void visit(ShPtr< EqOpExpr > expr)=0
virtual void visit(ShPtr< GtOpExpr > expr)=0
virtual void visit(ShPtr< PointerType > type)=0
virtual void visit(ShPtr< BreakStmt > stmt)=0
virtual void visit(ShPtr< UForLoopStmt > stmt)=0
virtual void visit(ShPtr< OrOpExpr > expr)=0
virtual void visit(ShPtr< AndOpExpr > expr)=0
virtual void visit(ShPtr< GlobalVarDef > varDef)=0
virtual void visit(ShPtr< NotOpExpr > expr)=0
virtual void visit(ShPtr< UnknownType > type)=0
virtual void visit(ShPtr< WhileLoopStmt > stmt)=0
virtual void visit(ShPtr< LtEqOpExpr > expr)=0
virtual void visit(ShPtr< NeqOpExpr > expr)=0
virtual void visit(ShPtr< GtEqOpExpr > expr)=0
virtual void visit(ShPtr< CallExpr > expr)=0
virtual void visit(ShPtr< ConstNullPointer > constant)=0
virtual void visit(ShPtr< EmptyStmt > stmt)=0
virtual void visit(ShPtr< PtrToIntCastExpr > expr)=0
virtual void visit(ShPtr< Function > func)=0
virtual void visit(ShPtr< ExtCastExpr > expr)=0
virtual void visit(ShPtr< BitShlOpExpr > expr)=0
virtual void visit(ShPtr< Variable > var)=0
virtual void visit(ShPtr< AddressOpExpr > expr)=0
virtual void visit(ShPtr< BitAndOpExpr > expr)=0
virtual void visit(ShPtr< ConstInt > constant)=0
virtual void visit(ShPtr< VoidType > type)=0
virtual void visit(ShPtr< GotoStmt > stmt)=0
virtual void visit(ShPtr< ConstArray > constant)=0
virtual void visit(ShPtr< CommaOpExpr > expr)=0
virtual void visit(ShPtr< FPToIntCastExpr > expr)=0
virtual void visit(ShPtr< IntToPtrCastExpr > expr)=0
virtual void visit(ShPtr< ForLoopStmt > stmt)=0
virtual void visit(ShPtr< SubOpExpr > expr)=0
virtual void visit(ShPtr< CallStmt > stmt)=0
virtual void visit(ShPtr< TernaryOpExpr > expr)=0
virtual void visit(ShPtr< ModOpExpr > expr)=0
virtual void visit(ShPtr< TruncCastExpr > expr)=0
virtual void visit(ShPtr< FloatType > type)=0
virtual void visit(ShPtr< StringType > type)=0
virtual void visit(ShPtr< AssignOpExpr > expr)=0
virtual void visit(ShPtr< BitOrOpExpr > expr)=0
virtual void visit(ShPtr< ArrayType > type)=0
virtual void visit(ShPtr< ContinueStmt > stmt)=0
virtual void visit(ShPtr< ConstBool > constant)=0
virtual void visit(ShPtr< ArrayIndexOpExpr > expr)=0
A library providing API for working with back-end IR.
StringType
Definition: string.h:16
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
Definition: archive_wrapper.h:19
Declarations, aliases, macros, etc. for the use of smart pointers.