public:
InlineableFunctionLocator();
- const std::set<FunctionDeclaration *> &apply(Stage &s) { visit(s.content); return inlineable; }
+ const std::set<FunctionDeclaration *> &apply(Stage &s) { s.content.visit(*this); return inlineable; }
private:
virtual void visit(FunctionCall &);
virtual void visit(FunctionDeclaration &);
- using TraversingVisitor::visit;
};
class FunctionInliner: private TraversingVisitor
virtual void visit(FunctionCall &);
virtual void visit(VariableDeclaration &);
virtual void visit(Return &);
- using TraversingVisitor::visit;
};
class ConstantConditionEliminator: private TraversingVisitor
{
private:
- unsigned scope_level;
- Block *current_block;
bool record_only;
ExpressionEvaluator::ValueMap variable_values;
NodeList<Statement>::iterator insert_point;
virtual void visit(VariableDeclaration &);
virtual void visit(Conditional &);
virtual void visit(Iteration &);
- using TraversingVisitor::visit;
};
class UnusedVariableRemover: private TraversingVisitor
Assignment *assignment;
bool assignment_target;
bool assign_to_subscript;
- bool global_scope;
public:
UnusedVariableRemover();
private:
virtual void visit(VariableReference &);
+ virtual void visit(InterfaceBlockReference &);
virtual void visit(MemberAccess &);
virtual void visit(BinaryExpression &);
virtual void visit(Assignment &);
void merge_down_variables();
virtual void visit(Conditional &);
virtual void visit(Iteration &);
- using TraversingVisitor::visit;
};
class UnusedFunctionRemover: private TraversingVisitor
private:
virtual void visit(FunctionCall &);
virtual void visit(FunctionDeclaration &);
- using TraversingVisitor::visit;
};
} // namespace SL