- virtual void visit(Passthrough &);
-};
-
-class DeclarationReorderer: public StageVisitor
-{
-private:
- enum DeclarationKind
- {
- NO_DECLARATION,
- LAYOUT,
- STRUCT,
- VARIABLE,
- FUNCTION
- };
-
- unsigned scope_level;
- DeclarationKind kind;
- std::set<Node *> ordered_funcs;
- std::set<Node *> needed_funcs;
-
-public:
- DeclarationReorderer();
-
- using StageVisitor::visit;
- virtual void visit(Block &);
- virtual void visit(FunctionCall &);
- virtual void visit(InterfaceLayout &) { kind = LAYOUT; }
- virtual void visit(StructDeclaration &) { kind = STRUCT; }
- virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &) { kind = VARIABLE; }