]> git.tdb.fi Git - libs/gl.git/blob - source/glsl/output.h
Track source names in SL::Module
[libs/gl.git] / source / glsl / output.h
1 #ifndef MSP_GL_SL_OUTPUT_H_
2 #define MSP_GL_SL_OUTPUT_H_
3
4 #include "syntax.h"
5 #include "visitor.h"
6
7 namespace Msp {
8 namespace GL {
9 namespace SL {
10
11 class Formatter: private TraversingVisitor
12 {
13 private:
14         Stage *stage;
15         std::string formatted;
16         unsigned source_index;
17         unsigned source_line;
18         unsigned indent;
19         bool parameter_list;
20         std::string block_interface;
21
22 public:
23         Formatter();
24
25         const std::string &apply(Stage &);
26
27 private:
28         void append(const std::string &);
29         void append(char);
30         void set_source(unsigned, unsigned);
31
32         virtual void visit(Block &);
33         virtual void visit(Literal &);
34         virtual void visit(ParenthesizedExpression &);
35         virtual void visit(VariableReference &);
36         virtual void visit(MemberAccess &);
37         virtual void visit(UnaryExpression &);
38         virtual void visit(BinaryExpression &);
39         virtual void visit(Assignment &);
40         virtual void visit(FunctionCall &);
41         virtual void visit(ExpressionStatement &);
42         virtual void visit(Import &);
43         virtual void visit(Precision &);
44         virtual void visit(Layout &);
45         virtual void visit(InterfaceLayout &);
46         virtual void visit(StructDeclaration &);
47         virtual void visit(VariableDeclaration &);
48         virtual void visit(InterfaceBlock &);
49         virtual void visit(FunctionDeclaration &);
50         virtual void visit(Conditional &);
51         virtual void visit(Iteration &);
52         virtual void visit(Return &);
53         virtual void visit(Jump &);
54         using TraversingVisitor::visit;
55 };
56
57 } // namespace SL
58 } // namespace GL
59 } // namespace Msp
60
61 #endif