]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.h
Refactor resolution of declarations for MemberAccess
[libs/gl.git] / source / glsl / generate.h
index ddf2b5f629cb0a8aadedd76dd0eab5041dfe1fa4..3d175b42dceda80c71c5052bfbdba0862ea1a4cd 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;
        std::string block_interface;
+       bool r_any_resolved;
        bool record_target;
        bool r_self_referencing;
        VariableDeclaration *r_assignment_target;
@@ -95,7 +95,7 @@ private:
 public:
        VariableResolver();
 
-       void apply(Stage &);
+       bool apply(Stage &);
 
 private:
        virtual void enter(Block &);
@@ -124,9 +124,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 +141,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 &);