aggregate(0),
assignment(0),
assignment_target(false),
- assign_to_subscript(false)
+ assign_to_subscript(false),
+ side_effects(false)
{ }
bool UnusedVariableRemover::apply(Stage &stage)
unused_nodes.erase(memacc.declaration);
}
+void UnusedVariableRemover::visit(UnaryExpression &unary)
+{
+ TraversingVisitor::visit(unary);
+ if(unary.oper=="++" || unary.oper=="--")
+ side_effects = true;
+}
+
void UnusedVariableRemover::visit(BinaryExpression &binary)
{
if(binary.oper=="[")
}
assign.right->visit(*this);
assignment = &assign;
+ side_effects = true;
+}
+
+void UnusedVariableRemover::visit(FunctionCall &call)
+{
+ TraversingVisitor::visit(call);
+ side_effects = true;
}
void UnusedVariableRemover::record_assignment(VariableDeclaration &var, Node &node, bool chained)
void UnusedVariableRemover::visit(ExpressionStatement &expr)
{
assignment = 0;
+ side_effects = false;
TraversingVisitor::visit(expr);
if(assignment && assignment->target_declaration)
record_assignment(*assignment->target_declaration, expr, (assignment->self_referencing || assign_to_subscript));
+ if(!side_effects)
+ unused_nodes.insert(&expr);
}
void UnusedVariableRemover::visit(StructDeclaration &strct)