00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "comma/ast/AttribExpr.h"
00010 #include "comma/ast/AggExpr.h"
00011 #include "comma/ast/ExprVisitor.h"
00012
00013 using namespace comma;
00014
00015 using llvm::dyn_cast;
00016 using llvm::cast;
00017 using llvm::isa;
00018
00021 #define DISPATCH(TYPE, NODE) \
00022 Ast::AST_ ## TYPE: \
00023 visit ## TYPE(cast<TYPE>(NODE)); \
00024 break
00025
00026 void ExprVisitor::visitAst(Ast *node)
00027 {
00028 if (Expr *expr = dyn_cast<Expr>(node))
00029 visitExpr(expr);
00030 }
00031
00032 void ExprVisitor::visitExpr(Expr *node)
00033 {
00034 if (isa<AttribExpr>(node))
00035 visitAttribExpr(cast<AttribExpr>(node));
00036 else {
00037 switch (node->getKind()) {
00038 default:
00039 assert(false && "Cannot visit this kind of node!");
00040 break;
00041 case DISPATCH(DeclRefExpr, node);
00042 case DISPATCH(FunctionCallExpr, node);
00043 case DISPATCH(IndexedArrayExpr, node);
00044 case DISPATCH(SelectedExpr, node);
00045 case DISPATCH(InjExpr, node);
00046 case DISPATCH(PrjExpr, node);
00047 case DISPATCH(IntegerLiteral, node);
00048 case DISPATCH(StringLiteral, node);
00049 case DISPATCH(AggregateExpr, node);
00050 case DISPATCH(ConversionExpr, node);
00051 case DISPATCH(NullExpr, node);
00052 case DISPATCH(QualifiedExpr, node);
00053 case DISPATCH(DereferenceExpr, node);
00054 case DISPATCH(AllocatorExpr, node);
00055 case DISPATCH(DiamondExpr, node);
00056 };
00057 }
00058 }
00059
00060 void ExprVisitor::visitAttribExpr(AttribExpr *node)
00061 {
00062 switch (node->getKind()) {
00063 default:
00064 assert(false && "Cannot visit this kind of attribute!");
00065 break;
00066 case DISPATCH(FirstAE, node);
00067 case DISPATCH(FirstArrayAE, node);
00068 case DISPATCH(LastArrayAE, node);
00069 case DISPATCH(LastAE, node);
00070 };
00071 }
00072
00073
00074
00075
00076 void ExprVisitor::visitDeclRefExpr(DeclRefExpr *node) { }
00077 void ExprVisitor::visitFunctionCallExpr(FunctionCallExpr *node) { }
00078 void ExprVisitor::visitIndexedArrayExpr(IndexedArrayExpr *node) { }
00079 void ExprVisitor::visitSelectedExpr(SelectedExpr *node) { }
00080 void ExprVisitor::visitInjExpr(InjExpr *node) { }
00081 void ExprVisitor::visitPrjExpr(PrjExpr *node) { }
00082 void ExprVisitor::visitIntegerLiteral(IntegerLiteral *node) { }
00083 void ExprVisitor::visitStringLiteral(StringLiteral *node) { }
00084 void ExprVisitor::visitAggregateExpr(AggregateExpr *node) { }
00085 void ExprVisitor::visitConversionExpr(ConversionExpr *node) { }
00086 void ExprVisitor::visitNullExpr(NullExpr *node) { }
00087 void ExprVisitor::visitQualifiedExpr(QualifiedExpr *node) { }
00088 void ExprVisitor::visitDereferenceExpr(DereferenceExpr *node) { }
00089 void ExprVisitor::visitAllocatorExpr(AllocatorExpr *node) { }
00090 void ExprVisitor::visitDiamondExpr(DiamondExpr *node) { }
00091
00092 void ExprVisitor::visitFirstAE(FirstAE *node) { }
00093 void ExprVisitor::visitFirstArrayAE(FirstArrayAE *node) { }
00094 void ExprVisitor::visitLastArrayAE(LastArrayAE *node) { }
00095 void ExprVisitor::visitLastAE(LastAE *node) { }