1 // =================================
  2 // Copyright (c) 2021 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 #ifndef CMAJOR_BINDER_BOUND_NODE_VISITOR_INCLUDED
  7 #define CMAJOR_BINDER_BOUND_NODE_VISITOR_INCLUDED
  8 #include <cmajor/binder/BinderApi.hpp>
  9 
 10 namespace cmajor { namespace binder {
 11 
 12 class BoundCompileUnit;
 13 class BoundNamespace;
 14 class BoundClass;
 15 class BoundEnumTypeDefinition;
 16 class BoundFunction;
 17 class BoundSequenceStatement;
 18 class BoundCompoundStatement;
 19 class BoundReturnStatement;
 20 class BoundIfStatement;
 21 class BoundWhileStatement;
 22 class BoundDoStatement;
 23 class BoundForStatement;
 24 class BoundSwitchStatement;
 25 class BoundCaseStatement;
 26 class BoundGotoCaseStatement;
 27 class BoundGotoDefaultStatement;
 28 class BoundDefaultStatement;
 29 class BoundBreakStatement;
 30 class BoundContinueStatement;
 31 class BoundGotoStatement;
 32 class BoundConstructionStatement;
 33 class BoundAssignmentStatement;
 34 class BoundExpressionStatement;
 35 class BoundInitializationStatement;
 36 class BoundEmptyStatement;
 37 class BoundSetVmtPtrStatement;
 38 class BoundThrowStatement;
 39 class BoundRethrowStatement;
 40 class BoundTryStatement;
 41 class BoundCatchStatement;
 42 class BoundParameter;
 43 class BoundLocalVariable;
 44 class BoundMemberVariable;
 45 class BoundConstant;
 46 class BoundEnumConstant;
 47 class BoundLiteral;
 48 class BoundTemporary;
 49 class BoundSizeOfExpression;
 50 class BoundAddressOfExpression;
 51 class BoundDereferenceExpression;
 52 class BoundReferenceToPointerExpression;
 53 class BoundFunctionCall;
 54 class BoundDelegateCall;
 55 class BoundClassDelegateCall;
 56 class BoundInterfaceCall;
 57 class BoundConversion;
 58 class BoundConstructExpression;
 59 class BoundConstructAndReturnTemporaryExpression;
 60 class BoundClassOrClassDelegateConversionResult;
 61 class BoundIsExpression;
 62 class BoundAsExpression;
 63 class BoundTypeNameExpression;
 64 class BoundTypeIdExpression;
 65 class BoundBitCast;
 66 class BoundFunctionPtr;
 67 class BoundDisjunction;
 68 class BoundConjunction;
 69 class BoundAtomicConstraint;
 70 class BoundDisjunctiveConstraint;
 71 class BoundConjunctiveConstraint;
 72 class BoundGlobalVariable;
 73 
 74 class BoundNodeVisitor 
 75 {
 76 public:
 77     virtual ~BoundNodeVisitor();
 78     virtual void Visit(BoundCompileUnit& boundCompileUnit) {}
 79     virtual void Visit(BoundNamespace& boundNamespace) {}
 80     virtual void Visit(BoundClass& boundClass) {}
 81     virtual void Visit(BoundEnumTypeDefinition& boundEnumTypeDefinition) {}
 82     virtual void Visit(BoundFunction& boundFunction) {}
 83     virtual void Visit(BoundSequenceStatement& boundSequenceStatement) {}
 84     virtual void Visit(BoundCompoundStatement& boundCompoundStatement) {}
 85     virtual void Visit(BoundReturnStatement& boundReturnStatement) {}
 86     virtual void Visit(BoundIfStatement& boundIfStatement) {}
 87     virtual void Visit(BoundWhileStatement& boundWhileStatement) {}
 88     virtual void Visit(BoundDoStatement& boundDoStatement) {}
 89     virtual void Visit(BoundForStatement& boundForStatement) {}
 90     virtual void Visit(BoundSwitchStatement& boundSwitchStatement) {}
 91     virtual void Visit(BoundCaseStatement& boundCaseStatement) {}
 92     virtual void Visit(BoundDefaultStatement& boundDefaultStatement) {}
 93     virtual void Visit(BoundGotoCaseStatement& boundGotoCaseStatement) {}
 94     virtual void Visit(BoundGotoDefaultStatement& boundGotoDefaultStatement) {}
 95     virtual void Visit(BoundBreakStatement& boundBreakStatement) {}
 96     virtual void Visit(BoundContinueStatement& boundContinueStatement) {}
 97     virtual void Visit(BoundGotoStatement& boundGotoStatement) {}
 98     virtual void Visit(BoundConstructionStatement& boundConstructionStatement) {}
 99     virtual void Visit(BoundAssignmentStatement& boundAssignmentStatement) {}
100     virtual void Visit(BoundExpressionStatement& boundExpressionStatement) {}
101     virtual void Visit(BoundInitializationStatement& boundInitializationStatement) {}
102     virtual void Visit(BoundEmptyStatement& boundEmptyStatement) {}
103     virtual void Visit(BoundSetVmtPtrStatement& boundSetVmtPtrStatement) {}
104     virtual void Visit(BoundThrowStatement& boundThrowStatement) {}
105     virtual void Visit(BoundRethrowStatement& boundRethrowStatement) {}
106     virtual void Visit(BoundTryStatement& boundTryStatement) {}
107     virtual void Visit(BoundCatchStatement& boundCatchStatement) {}
108     virtual void Visit(BoundParameter& boundParameter) {}
109     virtual void Visit(BoundLocalVariable& boundLocalVariable) {}
110     virtual void Visit(BoundMemberVariable& boundMemberVariable) {}
111     virtual void Visit(BoundConstant& boundConstant) {}
112     virtual void Visit(BoundEnumConstant& boundEnumConstant) {}
113     virtual void Visit(BoundLiteral& boundLiteral) {}
114     virtual void Visit(BoundTemporary& boundTemporary) {}
115     virtual void Visit(BoundSizeOfExpression& boundSizeOfExpression) {}
116     virtual void Visit(BoundAddressOfExpression& boundAddressOfExpression) {}
117     virtual void Visit(BoundDereferenceExpression& boundDereferenceExpression) {}
118     virtual void Visit(BoundReferenceToPointerExpression& boundReferenceToPointerExpression) {}
119     virtual void Visit(BoundFunctionCall& boundFunctionCall) {}
120     virtual void Visit(BoundDelegateCall& boundDelegateCall) {}
121     virtual void Visit(BoundClassDelegateCall& boundClassDelegateCall) {}
122     virtual void Visit(BoundInterfaceCall& boundInterfaceCall) {}
123     virtual void Visit(BoundConversion& boundConversion) {}
124     virtual void Visit(BoundConstructExpression& boundConstructExpression) {}
125     virtual void Visit(BoundConstructAndReturnTemporaryExpression& boundConstructAndReturnTemporaryExpression) {}
126     virtual void Visit(BoundClassOrClassDelegateConversionResult& boundClassOrClassDelegateConversionResult) {}
127     virtual void Visit(BoundIsExpression& boundIsExpression) {}
128     virtual void Visit(BoundAsExpression& boundAsExpression) {}
129     virtual void Visit(BoundTypeNameExpression& boundTypeNameExpression) {}
130     virtual void Visit(BoundTypeIdExpression& boundTypeIdExpression) {}
131     virtual void Visit(BoundBitCast& boundBitCast) {}
132     virtual void Visit(BoundFunctionPtr& boundFunctionPtr) {}
133     virtual void Visit(BoundDisjunction& boundDisjunction) {}
134     virtual void Visit(BoundConjunction& boundConjunction) {}
135     virtual void Visit(BoundAtomicConstraint& boundAtomicConstraint) {}
136     virtual void Visit(BoundDisjunctiveConstraint& boundDisjunctiveConstraint) {}
137     virtual void Visit(BoundConjunctiveConstraint& boundConjunctiveConstraint) {}
138     virtual void Visit(BoundGlobalVariable& boundGlobalVariable) {}
139 };
140 
141 } } // namespace cmajor::binder
142 
143 #endif // CMAJOR_BINDER_BOUND_NODE_VISITOR_INCLUDED