+ struct DeclarationReorderer: Visitor
+ {
+ enum DeclarationKind
+ {
+ NO_DECLARATION,
+ LAYOUT,
+ STRUCT,
+ VARIABLE,
+ FUNCTION
+ };
+
+ DeclarationKind kind;
+
+ DeclarationReorderer();
+
+ virtual void visit(ProgramSyntax::Block &);
+ virtual void visit(ProgramSyntax::InterfaceLayout &) { kind = LAYOUT; }
+ virtual void visit(ProgramSyntax::StructDeclaration &) { kind = STRUCT; }
+ virtual void visit(ProgramSyntax::VariableDeclaration &) { kind = VARIABLE; }
+ virtual void visit(ProgramSyntax::InterfaceBlock &) { kind = VARIABLE; }
+ virtual void visit(ProgramSyntax::FunctionDeclaration &) { kind = FUNCTION; }
+ };
+