namespace GL {
namespace SL {
-class InlineableFunctionLocator: public TraversingVisitor
+class InlineableFunctionLocator: private TraversingVisitor
{
private:
std::map<FunctionDeclaration *, unsigned> refcounts;
const std::set<FunctionDeclaration *> &apply(Stage &s) { visit(s.content); return inlineable; }
- using TraversingVisitor::visit;
+private:
virtual void visit(FunctionCall &);
virtual void visit(FunctionDeclaration &);
+ using TraversingVisitor::visit;
};
-class FunctionInliner: public TraversingVisitor
+class FunctionInliner: private TraversingVisitor
{
private:
std::set<FunctionDeclaration *> inlineable;
RefPtr<Expression> inline_result;
public:
- FunctionInliner();
FunctionInliner(const std::set<FunctionDeclaration *> &);
void apply(Stage &s) { visit(s.content); }
private:
void visit_and_inline(RefPtr<Expression> &);
-public:
- using TraversingVisitor::visit;
+
virtual void visit(Block &);
virtual void visit(UnaryExpression &);
virtual void visit(BinaryExpression &);
virtual void visit(FunctionCall &);
virtual void visit(VariableDeclaration &);
virtual void visit(Return &);
+ using TraversingVisitor::visit;
};
-class ConstantConditionEliminator: public BlockModifier
+class ConstantConditionEliminator: private BlockModifier
{
private:
unsigned scope_level;
void apply(Stage &s) { visit(s.content); }
- using BlockModifier::visit;
+private:
virtual void visit(Block &);
virtual void visit(UnaryExpression &);
virtual void visit(Assignment &);
virtual void visit(VariableDeclaration &);
virtual void visit(Conditional &);
virtual void visit(Iteration &);
+ using BlockModifier::visit;
};
-class UnusedVariableLocator: public TraversingVisitor
+class UnusedVariableLocator: private TraversingVisitor
{
private:
struct VariableInfo
const std::set<Node *> &apply(Stage &);
- using TraversingVisitor::visit;
+private:
virtual void visit(VariableReference &);
virtual void visit(MemberAccess &);
virtual void visit(BinaryExpression &);
virtual void visit(Assignment &);
-private:
void record_assignment(VariableDeclaration &, Node &, bool);
void clear_assignments(VariableInfo &, bool);
-public:
virtual void visit(ExpressionStatement &);
virtual void visit(StructDeclaration &);
virtual void visit(VariableDeclaration &);
virtual void visit(InterfaceBlock &);
virtual void visit(FunctionDeclaration &);
-private:
void merge_down_variables();
-public:
virtual void visit(Conditional &);
virtual void visit(Iteration &);
+ using TraversingVisitor::visit;
};
-class UnusedFunctionLocator: public TraversingVisitor
+class UnusedFunctionLocator: private TraversingVisitor
{
private:
std::set<Node *> unused_nodes;
public:
const std::set<Node *> &apply(Stage &s) { visit(s.content); return unused_nodes; }
- using TraversingVisitor::visit;
+private:
virtual void visit(FunctionCall &);
virtual void visit(FunctionDeclaration &);
+ using TraversingVisitor::visit;
};
} // namespace SL