]> git.tdb.fi Git - libs/gl.git/commitdiff
Merge branch 'animation-rework'
authorMikko Rasa <tdb@tdb.fi>
Sat, 8 Jun 2019 06:50:02 +0000 (09:50 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 8 Jun 2019 06:50:02 +0000 (09:50 +0300)
source/programcompiler.cpp
source/programcompiler.h
source/programparser.cpp
source/programsyntax.h

index 5a17a9ed3857bf969005e57a73ebe94d01b9ec20..3dc07d80fa4dd2566c069d0cae5bdb4451f7ac5d 100644 (file)
@@ -8,6 +8,8 @@
 #include "resources.h"
 #include "shader.h"
 
+#undef interface
+
 using namespace std;
 
 namespace {
@@ -1413,6 +1415,7 @@ ProgramCompiler::UnusedVariableLocator::UnusedVariableLocator():
        aggregate(0),
        assignment(0),
        assignment_target(false),
+       assign_to_subscript(false),
        global_scope(true)
 { }
 
@@ -1458,6 +1461,8 @@ void ProgramCompiler::UnusedVariableLocator::visit(BinaryExpression &binary)
 {
        if(binary.oper=="[")
        {
+               if(assignment_target)
+                       assign_to_subscript = true;
                binary.left->visit(*this);
                SetForScope<bool> set(assignment_target, false);
                binary.right->visit(*this);
@@ -1469,6 +1474,7 @@ void ProgramCompiler::UnusedVariableLocator::visit(BinaryExpression &binary)
 void ProgramCompiler::UnusedVariableLocator::visit(Assignment &assign)
 {
        {
+               assign_to_subscript = false;
                SetForScope<bool> set(assignment_target, !assign.self_referencing);
                assign.left->visit(*this);
        }
@@ -1476,10 +1482,10 @@ void ProgramCompiler::UnusedVariableLocator::visit(Assignment &assign)
        assignment = &assign;
 }
 
-void ProgramCompiler::UnusedVariableLocator::record_assignment(VariableDeclaration &var, Node &node, bool self_ref)
+void ProgramCompiler::UnusedVariableLocator::record_assignment(VariableDeclaration &var, Node &node, bool chained)
 {
        VariableInfo &var_info = variables.back()[&var];
-       if(!self_ref)
+       if(!chained)
                clear_assignments(var_info, true);
        var_info.assignments.push_back(&node);
        var_info.conditionally_assigned = false;
@@ -1500,7 +1506,7 @@ void ProgramCompiler::UnusedVariableLocator::visit(ExpressionStatement &expr)
        assignment = 0;
        TraversingVisitor::visit(expr);
        if(assignment && assignment->target_declaration)
-               record_assignment(*assignment->target_declaration, expr, assignment->self_referencing);
+               record_assignment(*assignment->target_declaration, expr, (assignment->self_referencing || assign_to_subscript));
 }
 
 void ProgramCompiler::UnusedVariableLocator::visit(StructDeclaration &strct)
@@ -1685,6 +1691,7 @@ void ProgramCompiler::NodeRemover::visit(Iteration &iter)
 {
        if(to_remove.count(iter.init_statement.get()))
                iter.init_statement = 0;
+       TraversingVisitor::visit(iter);
 }
 
 
index 06306743fb7945b5f2783c70663bf11ff4a04828..1f0601b5871f859a5dc771f6566f9311644d355d 100644 (file)
@@ -279,6 +279,7 @@ private:
                std::vector<BlockVariableMap> variables;
                ProgramSyntax::Assignment *assignment;
                bool assignment_target;
+               bool assign_to_subscript;
                bool global_scope;
 
                UnusedVariableLocator();
index c02adb325c25eaba6d4df7f31d9b8963506a5cd4..4f08b97718d26afe4ab1b41b60af3ee5f737d70b 100644 (file)
@@ -3,6 +3,8 @@
 #include <msp/strings/regex.h>
 #include "programparser.h"
 
+#undef interface
+
 using namespace std;
 
 namespace Msp {
index 5e107a33a096232f2e3b3a0f93ed70ea36fe3b66..6a03f40fab67b2f4b02d17de5873587edf1d3e88 100644 (file)
@@ -7,6 +7,10 @@
 #include <vector>
 #include <msp/core/refptr.h>
 #include "extension.h"
+#include "uniform.h"
+
+#pragma push_macro("interface")
+#undef interface
 
 namespace Msp {
 namespace GL {
@@ -401,4 +405,6 @@ struct Module
 } // namespace GL
 } // namespace Msp
 
+#pragma pop_macro("interface")
+
 #endif