]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Streamline interface declarations
[libs/gl.git] / source / programsyntax.h
index 11a67430926849adee88a32cb636bcde544d1736..c8b0e1f74ed9d1679e8c652ddb1f52f896872df5 100644 (file)
@@ -187,6 +187,7 @@ struct VariableDeclaration: Node
        bool array;
        NodePtr<Expression> array_size;
        NodePtr<Expression> init_expression;
+       VariableDeclaration *linked_declaration;
 
        VariableDeclaration();
 
@@ -241,6 +242,14 @@ struct Iteration: Node
        virtual void visit(NodeVisitor &);
 };
 
+struct Passthrough: Node
+{
+       NodePtr<Expression> subscript;
+
+       virtual Passthrough *clone() const { return new Passthrough(*this); }
+       virtual void visit(NodeVisitor &);
+};
+
 struct Return: Node
 {
        NodePtr<Expression> expression;
@@ -269,6 +278,7 @@ struct NodeVisitor
        virtual void visit(FunctionDeclaration &) { }
        virtual void visit(Conditional &) { }
        virtual void visit(Iteration &) { }
+       virtual void visit(Passthrough &) { }
        virtual void visit(Return &) { }
 };
 
@@ -287,6 +297,7 @@ struct TraversingVisitor: NodeVisitor
        virtual void visit(FunctionDeclaration &);
        virtual void visit(Conditional &);
        virtual void visit(Iteration &);
+       virtual void visit(Passthrough &);
        virtual void visit(Return &);
 };
 
@@ -302,7 +313,10 @@ struct Context
 {
        ContextType type;
        bool present;
+       Context *previous;
        ProgramSyntax::Block content;
+       std::map<std::string, VariableDeclaration *> in_variables;
+       std::map<std::string, VariableDeclaration *> out_variables;
 
        Context(ContextType);
 };