struct UnusedVariableLocator: Visitor
{
- struct AssignmentList
+ struct VariableInfo
{
- std::vector<ProgramSyntax::Node *> nodes;
- bool conditional;
- bool self_referencing;
+ bool local;
+ std::vector<ProgramSyntax::Node *> assignments;
+ bool conditionally_assigned;
+ bool referenced;
+
+ VariableInfo();
};
typedef std::set<ProgramSyntax::Node *> ResultType;
- typedef std::map<ProgramSyntax::VariableDeclaration *, AssignmentList> BlockAssignmentMap;
+ typedef std::map<ProgramSyntax::VariableDeclaration *, VariableInfo> BlockVariableMap;
std::set<ProgramSyntax::Node *> unused_nodes;
std::map<ProgramSyntax::VariableDeclaration *, ProgramSyntax::Node *> aggregates;
ProgramSyntax::Node *aggregate;
- std::vector<BlockAssignmentMap> assignments;
+ std::vector<BlockVariableMap> variables;
ProgramSyntax::Assignment *assignment;
bool assignment_target;
- bool iteration;
- std::set<ProgramSyntax::Node *> used_in_iteration;
+ bool global_scope;
UnusedVariableLocator();
virtual void visit(ProgramSyntax::BinaryExpression &);
virtual void visit(ProgramSyntax::Assignment &);
void record_assignment(ProgramSyntax::VariableDeclaration &, ProgramSyntax::Node &, bool);
+ void clear_assignments(VariableInfo &, bool);
virtual void visit(ProgramSyntax::ExpressionStatement &);
virtual void visit(ProgramSyntax::StructDeclaration &);
virtual void visit(ProgramSyntax::VariableDeclaration &);
virtual void visit(ProgramSyntax::InterfaceBlock &);
virtual void visit(ProgramSyntax::FunctionDeclaration &);
- void merge_down_assignments();
+ void merge_down_variables();
virtual void visit(ProgramSyntax::Conditional &);
virtual void visit(ProgramSyntax::Iteration &);
};