+ unused_nodes.erase(memacc.declaration);
+}
+
+void ProgramCompiler::UnusedVariableLocator::visit(BinaryExpression &binary)
+{
+ if(binary.assignment)
+ {
+ binary.right->visit(*this);
+ assignment = true;
+ binary.left->visit(*this);
+ }
+ else
+ TraversingVisitor::visit(binary);
+}
+
+void ProgramCompiler::UnusedVariableLocator::visit(ExpressionStatement &expr)
+{
+ assignment = false;
+ assignment_target = 0;
+ TraversingVisitor::visit(expr);
+ if(assignment && assignment_target)
+ {
+ if(assignment_target->interface!="out" || (context->type!=FRAGMENT && !assignment_target->linked_declaration))
+ {
+ unused_nodes.insert(&expr);
+ assignments[assignment_target] = &expr;
+ }
+ else
+ unused_nodes.erase(assignment_target);
+ }
+ assignment = false;