1 #ifndef MSP_GL_SL_DEBUG_H_
2 #define MSP_GL_SL_DEBUG_H_
11 /** Creates a textual representation of the syntax tree. The result is encoded
13 class DumpTree: private TraversingVisitor
19 STRAIGHT = 0x2502, // │
21 BRANCH_LAST = 0x2514, // └
30 Branch(const char *t, Node *n = 0): text(t), node(n) { }
31 Branch(const std::string &t, Node *n = 0): text(t), node(n) { }
32 Branch(Node *n): node(n) { }
35 std::map<const Node *, unsigned> node_labels;
36 std::string formatted;
37 std::vector<TreeChars> tree;
40 const std::string &apply(Stage &);
43 void append(const std::string &);
44 void append_subtree(const std::vector<Branch> &);
48 void annotated_branch(const std::string &, Node &);
49 unsigned get_label(const Node &);
50 std::string format_type(TypeDeclaration *);
53 typename T::const_iterator increment(typename T::const_iterator &, const T &);
55 virtual void visit(Block &);
56 virtual void visit(Literal &);
57 virtual void visit(VariableReference &);
58 virtual void visit(InterfaceBlockReference &);
59 virtual void visit(MemberAccess &);
60 virtual void visit(Swizzle &);
61 virtual void visit(UnaryExpression &);
62 virtual void visit(BinaryExpression &);
63 virtual void visit(Assignment &);
64 virtual void visit(TernaryExpression &);
65 virtual void visit(FunctionCall &);
66 virtual void visit(ExpressionStatement &);
67 virtual void visit(Import &);
68 virtual void visit(Precision &);
69 virtual void visit(Layout &);
70 virtual void visit(InterfaceLayout &);
71 virtual void visit(BasicTypeDeclaration &);
72 virtual void visit(ImageTypeDeclaration &);
73 virtual void visit(StructDeclaration &);
74 virtual void visit(VariableDeclaration &);
75 virtual void visit(InterfaceBlock &);
76 virtual void visit(FunctionDeclaration &);
77 virtual void visit(Conditional &);
78 virtual void visit(Iteration &);
79 virtual void visit(Passthrough &);
80 virtual void visit(Return &);
81 virtual void visit(Jump &);