Files
MXCompiler/src/ast/expr_astnode.cpp
2024-08-13 14:03:23 +00:00

39 lines
1.5 KiB
C++

#include "expr_astnode.h"
#include <stdexcept>
#include "astnode_visitor.h"
#define SetAutoAccept(name) \
void name::accept(class ASTNodeVisitorBase *visitor) { \
if (auto v = dynamic_cast<ASTNodeVirturalVisitor *>(visitor)) { \
v->ActuralVisit(this); \
} else \
throw std::runtime_error("Cannot automatically dispatch visitor"); \
}
SetAutoAccept(NewArrayExpr_ASTNode);
SetAutoAccept(NewConstructExpr_ASTNode);
SetAutoAccept(NewExpr_ASTNode);
SetAutoAccept(AccessExpr_ASTNode);
SetAutoAccept(IndexExpr_ASTNode);
SetAutoAccept(SuffixExpr_ASTNode);
SetAutoAccept(PrefixExpr_ASTNode);
SetAutoAccept(OppositeExpr_ASTNode);
SetAutoAccept(LNotExpr_ASTNode);
SetAutoAccept(BNotExpr_ASTNode);
SetAutoAccept(MDMExpr_ASTNode);
SetAutoAccept(PMExpr_ASTNode);
SetAutoAccept(RLExpr_ASTNode);
SetAutoAccept(GGLLExpr_ASTNode);
SetAutoAccept(NEExpr_ASTNode);
SetAutoAccept(BAndExpr_ASTNode);
SetAutoAccept(BXorExpr_ASTNode);
SetAutoAccept(BOrExpr_ASTNode);
SetAutoAccept(LAndExpr_ASTNode);
SetAutoAccept(LOrExpr_ASTNode);
SetAutoAccept(TernaryExpr_ASTNode);
SetAutoAccept(AssignExpr_ASTNode);
SetAutoAccept(ThisExpr_ASTNode);
SetAutoAccept(ParenExpr_ASTNode);
SetAutoAccept(IDExpr_ASTNode);
SetAutoAccept(FunctionCallExpr_ASTNode);
SetAutoAccept(FormattedStringExpr_ASTNode);
SetAutoAccept(ConstantExpr_ASTNode);
#undef SetAutoAccept