]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/syntax.h
Track source names in SL::Module
[libs/gl.git] / source / glsl / syntax.h
index deb2c78027c0debcddaeac9eb0b24a4f693ec51e..7764712498bb3106666f3e8bee98de72881516df 100644 (file)
@@ -7,6 +7,7 @@
 #include <vector>
 #include <msp/core/refptr.h>
 #include "extension.h"
+#include "sourcemap.h"
 #include "uniform.h"
 
 #pragma push_macro("interface")
@@ -360,67 +361,17 @@ struct Jump: Statement
        virtual void visit(NodeVisitor &);
 };
 
-struct NodeVisitor
-{
-       virtual ~NodeVisitor() { }
-
-       virtual void visit(Block &) { }
-       virtual void visit(Literal &) { }
-       virtual void visit(ParenthesizedExpression &) { }
-       virtual void visit(VariableReference &) { }
-       virtual void visit(MemberAccess &) { }
-       virtual void visit(UnaryExpression &) { }
-       virtual void visit(BinaryExpression &) { }
-       virtual void visit(Assignment &);
-       virtual void visit(FunctionCall &) { }
-       virtual void visit(ExpressionStatement &) { }
-       virtual void visit(Import &) { }
-       virtual void visit(Precision &) { }
-       virtual void visit(Layout &) { }
-       virtual void visit(InterfaceLayout &) { }
-       virtual void visit(StructDeclaration &) { }
-       virtual void visit(VariableDeclaration &) { }
-       virtual void visit(InterfaceBlock &) { }
-       virtual void visit(FunctionDeclaration &) { }
-       virtual void visit(Conditional &) { }
-       virtual void visit(Iteration &) { }
-       virtual void visit(Passthrough &) { }
-       virtual void visit(Return &) { }
-       virtual void visit(Jump &) { }
-};
-
-struct TraversingVisitor: NodeVisitor
-{
-       using NodeVisitor::visit;
-       virtual void visit(Block &);
-       virtual void visit(ParenthesizedExpression &);
-       virtual void visit(MemberAccess &);
-       virtual void visit(UnaryExpression &);
-       virtual void visit(BinaryExpression &);
-       virtual void visit(FunctionCall &);
-       virtual void visit(ExpressionStatement &);
-       virtual void visit(InterfaceLayout &);
-       virtual void visit(StructDeclaration &);
-       virtual void visit(VariableDeclaration &);
-       virtual void visit(InterfaceBlock &);
-       virtual void visit(FunctionDeclaration &);
-       virtual void visit(Conditional &);
-       virtual void visit(Iteration &);
-       virtual void visit(Passthrough &);
-       virtual void visit(Return &);
-};
-
-enum StageType
-{
-       SHARED,
-       VERTEX,
-       GEOMETRY,
-       FRAGMENT
-};
-
 struct Stage
 {
-       StageType type;
+       enum Type
+       {
+               SHARED,
+               VERTEX,
+               GEOMETRY,
+               FRAGMENT
+       };
+
+       Type type;
        Stage *previous;
        Block content;
        std::map<std::string, VariableDeclaration *> in_variables;
@@ -429,11 +380,14 @@ struct Stage
        Version required_version;
        std::vector<const Extension *> required_extensions;
 
-       Stage(StageType);
+       Stage(Type);
+
+       static const char *get_stage_name(Type);
 };
 
 struct Module
 {
+       SourceMap source_map;
        Stage shared;
        std::list<Stage> stages;