]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Remove unused variable and struct declarations from the syntax tree
[libs/gl.git] / source / programsyntax.h
index 8f72a0bdfc7258a4af9bdb048e0aad114b4a83a2..11a67430926849adee88a32cb636bcde544d1736 100644 (file)
@@ -41,15 +41,20 @@ private:
 public:
        T *operator->() { return node; }
        const T *operator->() const { return node; }
+       T &operator*() { return *node; }
+       const T &operator*() const { return *node; }
        operator void *() const { return node; }
 };
 
+struct StructDeclaration;
 struct VariableDeclaration;
 
 struct Block: Node
 {
        std::list<NodePtr<Node> > body;
        bool use_braces;
+       std::map<std::string, StructDeclaration *> types;
+       std::map<std::string, VariableDeclaration *> variables;
 
        Block();
 
@@ -81,6 +86,9 @@ struct ParenthesizedExpression: Expression
 struct VariableReference: Expression
 {
        std::string name;
+       VariableDeclaration *declaration;
+
+       VariableReference();
 
        virtual VariableReference *clone() const { return new VariableReference(*this); }
        virtual void visit(NodeVisitor &);
@@ -90,6 +98,7 @@ struct MemberAccess: Expression
 {
        NodePtr<Expression> left;
        std::string member;
+       VariableDeclaration *declaration;
 
        virtual MemberAccess *clone() const { return new MemberAccess(*this); }
        virtual void visit(NodeVisitor &);
@@ -173,6 +182,7 @@ struct VariableDeclaration: Node
        std::string sampling;
        std::string interface;
        std::string type;
+       StructDeclaration *type_declaration;
        std::string name;
        bool array;
        NodePtr<Expression> array_size;
@@ -262,6 +272,24 @@ struct NodeVisitor
        virtual void visit(Return &) { }
 };
 
+struct TraversingVisitor: NodeVisitor
+{
+       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(StructDeclaration &);
+       virtual void visit(VariableDeclaration &);
+       virtual void visit(InterfaceBlock &);
+       virtual void visit(FunctionDeclaration &);
+       virtual void visit(Conditional &);
+       virtual void visit(Iteration &);
+       virtual void visit(Return &);
+};
+
 enum ContextType
 {
        GLOBAL,
@@ -285,7 +313,6 @@ struct Module
        Context vertex_context;
        Context geometry_context;
        Context fragment_context;
-       std::map<std::string, StructDeclaration *> structs;
 
        Module();
 };