]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.h
Additional rules for bit shift operators
[libs/gl.git] / source / glsl / generate.h
index ddf2b5f629cb0a8aadedd76dd0eab5041dfe1fa4..54e39f39aa0679088ea7d18dd98192c32645f07c 100644 (file)
@@ -85,9 +85,9 @@ class VariableResolver: private TraversingVisitor
 {
 private:
        Stage *stage;
-       std::map<std::string, VariableDeclaration *> *r_members;
-       RefPtr<InterfaceBlockReference> r_iface_ref;
+       RefPtr<Expression> r_replacement_expr;
        std::string block_interface;
+       bool r_any_resolved;
        bool record_target;
        bool r_self_referencing;
        VariableDeclaration *r_assignment_target;
@@ -95,10 +95,11 @@ private:
 public:
        VariableResolver();
 
-       void apply(Stage &);
+       bool apply(Stage &);
 
 private:
        virtual void enter(Block &);
+       void visit_and_replace(RefPtr<Expression> &);
        virtual void visit(VariableReference &);
        virtual void visit(InterfaceBlockReference &);
        virtual void visit(MemberAccess &);
@@ -124,9 +125,12 @@ private:
 
        Stage *stage;
        std::vector<BasicTypeDeclaration *> basic_types;
+       bool r_any_resolved;
 
 public:
-       void apply(Stage &s) { stage = &s; s.content.visit(*this); }
+       ExpressionResolver();
+
+       bool apply(Stage &);
 
 private:
        static bool is_scalar(BasicTypeDeclaration &);
@@ -138,6 +142,7 @@ private:
        BasicTypeDeclaration *find_type(BasicTypeDeclaration &, BasicTypeDeclaration::Kind, unsigned);
        void convert_to(RefPtr<Expression> &, BasicTypeDeclaration &);
        bool convert_to_element(RefPtr<Expression> &, BasicTypeDeclaration &);
+       void resolve(Expression &, TypeDeclaration *, bool);
 
        virtual void visit(Literal &);
        virtual void visit(ParenthesizedExpression &);
@@ -145,6 +150,7 @@ private:
        virtual void visit(InterfaceBlockReference &);
        virtual void visit(MemberAccess &);
        virtual void visit(UnaryExpression &);
+       void visit(BinaryExpression &, bool);
        virtual void visit(BinaryExpression &);
        virtual void visit(Assignment &);
        virtual void visit(FunctionCall &);