From: Mikko Rasa Date: Sat, 8 Jun 2019 06:50:02 +0000 (+0300) Subject: Merge branch 'animation-rework' X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=a126d48791f0ee697c11e44efaa17fe9dc6e07cf;hp=22ed49c0b233566fc5d72b7c9769fd3ba543ab40 Merge branch 'animation-rework' --- diff --git a/source/programcompiler.cpp b/source/programcompiler.cpp index 5a17a9ed..3dc07d80 100644 --- a/source/programcompiler.cpp +++ b/source/programcompiler.cpp @@ -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 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 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); } diff --git a/source/programcompiler.h b/source/programcompiler.h index 06306743..1f0601b5 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -279,6 +279,7 @@ private: std::vector variables; ProgramSyntax::Assignment *assignment; bool assignment_target; + bool assign_to_subscript; bool global_scope; UnusedVariableLocator(); diff --git a/source/programparser.cpp b/source/programparser.cpp index c02adb32..4f08b977 100644 --- a/source/programparser.cpp +++ b/source/programparser.cpp @@ -3,6 +3,8 @@ #include #include "programparser.h" +#undef interface + using namespace std; namespace Msp { diff --git a/source/programsyntax.h b/source/programsyntax.h index 5e107a33..6a03f40f 100644 --- a/source/programsyntax.h +++ b/source/programsyntax.h @@ -7,6 +7,10 @@ #include #include #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