]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Support layout declarations on variables
[libs/gl.git] / source / programsyntax.h
index 2f9f1fc08a50f47eb3a8fc6f4757217cb39f0b09..796c4b938f10f6f84eb1fbcdcdd0c3fd9bd6f062 100644 (file)
@@ -182,12 +182,20 @@ struct Layout: Node
        };
 
        std::vector<Qualifier> qualifiers;
-       std::string interface;
 
        virtual Layout *clone() const { return new Layout(*this); }
        virtual void visit(NodeVisitor &);
 };
 
+struct InterfaceLayout: Node
+{
+       std::string interface;
+       Layout layout;
+
+       virtual InterfaceLayout *clone() const { return new InterfaceLayout(*this); }
+       virtual void visit(NodeVisitor &);
+};
+
 struct StructDeclaration: Node
 {
        std::string name;
@@ -211,6 +219,7 @@ struct VariableDeclaration: Node
        NodePtr<Expression> array_size;
        NodePtr<Expression> init_expression;
        VariableDeclaration *linked_declaration;
+       NodePtr<Layout> layout;
 
        VariableDeclaration();
 
@@ -300,6 +309,7 @@ struct NodeVisitor
        virtual void visit(ExpressionStatement &) { }
        virtual void visit(Import &) { }
        virtual void visit(Layout &) { }
+       virtual void visit(InterfaceLayout &) { }
        virtual void visit(StructDeclaration &) { }
        virtual void visit(VariableDeclaration &) { }
        virtual void visit(InterfaceBlock &) { }
@@ -319,6 +329,7 @@ struct TraversingVisitor: NodeVisitor
        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 &);