]> git.tdb.fi Git - libs/gl.git/commitdiff
Adjust member access of the various visitors in the GLSL compiler
authorMikko Rasa <tdb@tdb.fi>
Mon, 15 Feb 2021 16:04:53 +0000 (18:04 +0200)
committerMikko Rasa <tdb@tdb.fi>
Mon, 15 Feb 2021 16:04:53 +0000 (18:04 +0200)
Most of them don't work properly if given some random node to start with.

source/glsl/compatibility.cpp
source/glsl/compatibility.h
source/glsl/generate.h
source/glsl/optimize.h
source/glsl/output.h

index 398a7bd30a76eaa4b141b400d9cd4e08d0e87958..1ada7b7c9acbd0f23fab28e868ca839621263b92 100644 (file)
@@ -91,6 +91,12 @@ LegacyConverter::LegacyConverter(const Version &v):
        frag_out(0)
 { }
 
+void LegacyConverter::apply(Stage &s)
+{
+       SetForScope<Stage *> set_stage(stage, &s);
+       visit(s.content);
+}
+
 bool LegacyConverter::check_version(const Version &feature_version) const
 {
        if(target_version<feature_version)
@@ -113,12 +119,6 @@ bool LegacyConverter::check_extension(const Extension &extension) const
        return true;
 }
 
-void LegacyConverter::apply(Stage &s)
-{
-       SetForScope<Stage *> set_stage(stage, &s);
-       visit(s.content);
-}
-
 bool LegacyConverter::supports_unified_interface_syntax() const
 {
        if(target_api==OPENGL_ES2)
index 732f3477db5f9b401550ff999bde3d6f50af0718..fdbd3d07fb304c0c79202445f4df04befaef9a58 100644 (file)
@@ -8,7 +8,7 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-class DefaultPrecisionGenerator: public BlockModifier
+class DefaultPrecisionGenerator: private BlockModifier
 {
 private:
        Stage::Type stage_type;
@@ -20,23 +20,25 @@ public:
 
        void apply(Stage &);
 
-       using BlockModifier::visit;
+private:
        virtual void visit(Block &);
        virtual void visit(Precision &);
        virtual void visit(VariableDeclaration &);
+       using BlockModifier::visit;
 };
 
-class PrecisionRemover: public BlockModifier
+class PrecisionRemover: private BlockModifier
 {
 public:
        void apply(Stage &s) { visit(s.content); }
 
-       using BlockModifier::visit;
+private:
        virtual void visit(Precision &);
        virtual void visit(VariableDeclaration &);
+       using BlockModifier::visit;
 };
 
-class LegacyConverter: public BlockModifier
+class LegacyConverter: private BlockModifier
 {
 private:
        Stage *stage;
@@ -49,13 +51,11 @@ public:
        LegacyConverter();
        LegacyConverter(const Version &);
 
+       virtual void apply(Stage &);
+
 private:
        bool check_version(const Version &) const;
        bool check_extension(const Extension &) const;
-public:
-       using BlockModifier::visit;
-       virtual void apply(Stage &);
-private:
        bool supports_unified_interface_syntax() const;
        virtual void visit(VariableReference &);
        virtual void visit(Assignment &);
@@ -67,6 +67,7 @@ private:
        virtual void visit(VariableDeclaration &);
        bool supports_interface_blocks(const std::string &) const;
        virtual void visit(InterfaceBlock &);
+       using BlockModifier::visit;
 };
 
 } // namespace SL
index 90cf272219b9f2ba6bde8b5c4e6c349f5676218a..0c2a0ad8fce4b03aee235202f9a4eaebe0937d59 100644 (file)
@@ -11,7 +11,7 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-class DeclarationCombiner: public BlockModifier
+class DeclarationCombiner: private BlockModifier
 {
 private:
        bool toplevel;
@@ -23,13 +23,14 @@ public:
 
        void apply(Stage &s) { visit(s.content); }
 
-       using BlockModifier::visit;
+private:
        virtual void visit(Block &);
        virtual void visit(FunctionDeclaration &);
        virtual void visit(VariableDeclaration &);
+       using BlockModifier::visit;
 };
 
-class VariableResolver: public TraversingVisitor
+class VariableResolver: private TraversingVisitor
 {
 private:
        std::vector<Block *> blocks;
@@ -45,7 +46,7 @@ public:
 
        void apply(Stage &);
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(Block &);
        virtual void visit(VariableReference &);
        virtual void visit(MemberAccess &);
@@ -54,9 +55,10 @@ public:
        virtual void visit(StructDeclaration &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(InterfaceBlock &);
+       using TraversingVisitor::visit;
 };
 
-class FunctionResolver: public TraversingVisitor
+class FunctionResolver: private TraversingVisitor
 {
 private:
        std::map<std::string, std::vector<FunctionDeclaration *> > functions;
@@ -64,12 +66,13 @@ private:
 public:
        void apply(Stage &s) { visit(s.content); }
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(FunctionCall &);
        virtual void visit(FunctionDeclaration &);
+       using TraversingVisitor::visit;
 };
 
-class InterfaceGenerator: public BlockModifier
+class InterfaceGenerator: private BlockModifier
 {
 private:
        Stage *stage;
@@ -83,18 +86,19 @@ public:
 
        void apply(Stage &);
 
+private:
        static std::string get_out_prefix(Stage::Type);
-       using BlockModifier::visit;
-       virtual void visit(Block &);
        std::string change_prefix(const std::string &, const std::string &) const;
+       virtual void visit(Block &);
        bool generate_interface(VariableDeclaration &, const std::string &, const std::string &);
        ExpressionStatement &insert_assignment(const std::string &, Expression *);
        virtual void visit(VariableReference &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(Passthrough &);
+       using BlockModifier::visit;
 };
 
-class DeclarationReorderer: public TraversingVisitor
+class DeclarationReorderer: private TraversingVisitor
 {
 private:
        enum DeclarationKind
@@ -116,7 +120,7 @@ public:
 
        void apply(Stage &s) { visit(s.content); }
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(Block &);
        virtual void visit(FunctionCall &);
        virtual void visit(InterfaceLayout &) { kind = LAYOUT; }
@@ -124,6 +128,7 @@ public:
        virtual void visit(VariableDeclaration &);
        virtual void visit(InterfaceBlock &) { kind = VARIABLE; }
        virtual void visit(FunctionDeclaration &);
+       using TraversingVisitor::visit;
 };
 
 } // namespace SL
index 2e28d48a0dcbfe711057572cc7f5e1574dbe8789..cfebf0f782c46aee0c2bbc0730baf555b0081b8a 100644 (file)
@@ -10,7 +10,7 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-class InlineableFunctionLocator: public TraversingVisitor
+class InlineableFunctionLocator: private TraversingVisitor
 {
 private:
        std::map<FunctionDeclaration *, unsigned> refcounts;
@@ -22,12 +22,13 @@ public:
 
        const std::set<FunctionDeclaration *> &apply(Stage &s) { visit(s.content); return inlineable; }
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(FunctionCall &);
        virtual void visit(FunctionDeclaration &);
+       using TraversingVisitor::visit;
 };
 
-class FunctionInliner: public TraversingVisitor
+class FunctionInliner: private TraversingVisitor
 {
 private:
        std::set<FunctionDeclaration *> inlineable;
@@ -42,8 +43,7 @@ public:
 
 private:
        void visit_and_inline(RefPtr<Expression> &);
-public:
-       using TraversingVisitor::visit;
+
        virtual void visit(Block &);
        virtual void visit(UnaryExpression &);
        virtual void visit(BinaryExpression &);
@@ -51,9 +51,10 @@ public:
        virtual void visit(FunctionCall &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(Return &);
+       using TraversingVisitor::visit;
 };
 
-class ConstantConditionEliminator: public BlockModifier
+class ConstantConditionEliminator: private BlockModifier
 {
 private:
        unsigned scope_level;
@@ -65,16 +66,17 @@ public:
 
        void apply(Stage &s) { visit(s.content); }
 
-       using BlockModifier::visit;
+private:
        virtual void visit(Block &);
        virtual void visit(UnaryExpression &);
        virtual void visit(Assignment &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(Conditional &);
        virtual void visit(Iteration &);
+       using BlockModifier::visit;
 };
 
-class UnusedVariableLocator: public TraversingVisitor
+class UnusedVariableLocator: private TraversingVisitor
 {
 private:
        struct VariableInfo
@@ -103,28 +105,25 @@ public:
 
        const std::set<Node *> &apply(Stage &);
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(VariableReference &);
        virtual void visit(MemberAccess &);
        virtual void visit(BinaryExpression &);
        virtual void visit(Assignment &);
-private:
        void record_assignment(VariableDeclaration &, Node &, bool);
        void clear_assignments(VariableInfo &, bool);
-public:
        virtual void visit(ExpressionStatement &);
        virtual void visit(StructDeclaration &);
        virtual void visit(VariableDeclaration &);
        virtual void visit(InterfaceBlock &);
        virtual void visit(FunctionDeclaration &);
-private:
        void merge_down_variables();
-public:
        virtual void visit(Conditional &);
        virtual void visit(Iteration &);
+       using TraversingVisitor::visit;
 };
 
-class UnusedFunctionLocator: public TraversingVisitor
+class UnusedFunctionLocator: private TraversingVisitor
 {
 private:
        std::set<Node *> unused_nodes;
@@ -133,9 +132,10 @@ private:
 public:
        const std::set<Node *> &apply(Stage &s) { visit(s.content); return unused_nodes; }
 
-       using TraversingVisitor::visit;
+private:
        virtual void visit(FunctionCall &);
        virtual void visit(FunctionDeclaration &);
+       using TraversingVisitor::visit;
 };
 
 } // namespace SL
index 06bb5fd18f7069001b0275e29cc2d7986d40b0a5..5b03420223c3f70fb57f7f900f6708e2da5efe39 100644 (file)
@@ -8,7 +8,7 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
-class Formatter: public TraversingVisitor
+class Formatter: private TraversingVisitor
 {
 private:
        Stage *stage;
@@ -28,8 +28,7 @@ private:
        void append(const std::string &);
        void append(char);
        void set_source(unsigned, unsigned);
-public:
-       using TraversingVisitor::visit;
+
        virtual void visit(Block &);
        virtual void visit(Literal &);
        virtual void visit(ParenthesizedExpression &);
@@ -52,6 +51,7 @@ public:
        virtual void visit(Iteration &);
        virtual void visit(Return &);
        virtual void visit(Jump &);
+       using TraversingVisitor::visit;
 };
 
 } // namespace SL