00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00017 
00018 
00019 #ifndef COMMA_AST_EXPRDUMPER_HDR_GUARD
00020 #define COMMA_AST_EXPRDUMPER_HDR_GUARD
00021 
00022 #include "AstDumper.h"
00023 #include "comma/ast/ExprVisitor.h"
00024 
00025 namespace comma {
00026 
00027 class ExprDumper : public AstDumperBase, private ExprVisitor {
00028 
00029 public:
00032     ExprDumper(llvm::raw_ostream &stream, AstDumper *dumper)
00033         : AstDumperBase(stream),
00034           dumper(dumper) { }
00035 
00038     llvm::raw_ostream &dump(Expr *expr, unsigned level = 0);
00039 
00040 private:
00042     AstDumper *dumper;
00043 
00045     llvm::raw_ostream &dumpAST(Ast* node) {
00046         return dumper->dump(node, indentLevel);
00047     }
00048 
00059     void visitDeclRefExpr(DeclRefExpr *node);
00060     void visitFunctionCallExpr(FunctionCallExpr *node);
00061     void visitIndexedArrayExpr(IndexedArrayExpr *node);
00062     void visitInjExpr(InjExpr *node);
00063     void visitPrjExpr(PrjExpr *node);
00064     void visitIntegerLiteral(IntegerLiteral *node);
00065     void visitStringLiteral(StringLiteral *node);
00066     void visitAggregateExpr(AggregateExpr *node);
00067     void visitConversionExpr(ConversionExpr *node);
00068     void visitNullExpr(NullExpr *node);
00069     void visitQualifiedExpr(QualifiedExpr *node);
00070     void visitDereferenceExpr(DereferenceExpr *node);
00071     void visitAllocatorExpr(AllocatorExpr *node);
00072     void visitSelectedExpr(SelectedExpr *node);
00073 };
00074 
00075 } 
00076 
00077 #endif