]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/syntax.h
Move the StageType enum inside the Stage struct
[libs/gl.git] / source / glsl / syntax.h
index a2630ef06b52111b407daa8dd8d1c73ea7583260..25b7e4a0450d8d89e940579a87af356a74ee5ac1 100644 (file)
@@ -16,6 +16,30 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
+struct Operator
+{
+       enum Type
+       {
+               NO_OPERATOR,
+               BINARY,
+               PREFIX,
+               POSTFIX
+       };
+
+       enum Associativity
+       {
+               LEFT_TO_RIGHT,
+               RIGHT_TO_LEFT
+       };
+
+       char token[4];
+       unsigned precedence;
+       Type type;
+       Associativity assoc;
+
+       static const Operator operators[];
+};
+
 struct NodeVisitor;
 
 struct Node
@@ -336,67 +360,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;
@@ -405,7 +379,7 @@ struct Stage
        Version required_version;
        std::vector<const Extension *> required_extensions;
 
-       Stage(StageType);
+       Stage(Type);
 };
 
 struct Module