- struct UnusedVariableLocator: Visitor
- {
- struct VariableInfo
- {
- bool local;
- std::vector<Node *> assignments;
- bool conditionally_assigned;
- bool referenced;
-
- VariableInfo();
- };
-
- typedef std::set<Node *> ResultType;
- typedef std::map<VariableDeclaration *, VariableInfo> BlockVariableMap;
-
- std::set<Node *> unused_nodes;
- std::map<VariableDeclaration *, Node *> aggregates;
- Node *aggregate;
- std::vector<BlockVariableMap> variables;
- Assignment *assignment;
- bool assignment_target;
- bool assign_to_subscript;
- bool global_scope;
-
- UnusedVariableLocator();
-
- virtual void apply(Stage &);
- const ResultType &get_result() const { return unused_nodes; }
- using Visitor::visit;
- virtual void visit(VariableReference &);
- virtual void visit(MemberAccess &);
- virtual void visit(BinaryExpression &);
- virtual void visit(Assignment &);
- void record_assignment(VariableDeclaration &, Node &, bool);
- void clear_assignments(VariableInfo &, bool);
- virtual void visit(ExpressionStatement &);
- virtual void visit(StructDeclaration &);
- virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &);
- virtual void visit(FunctionDeclaration &);
- void merge_down_variables();
- virtual void visit(Conditional &);
- virtual void visit(Iteration &);
- };