]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.h
Rearrange expression node replacement
[libs/gl.git] / source / glsl / generate.h
index ddf2b5f629cb0a8aadedd76dd0eab5041dfe1fa4..9365c6c3490fec2fb6290769d2083d1bec22bf8f 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 &);