X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=8c4034d4e906baae7812ee66ecc1b84abff39448;hp=398bb214d10568800d69e757dec8eadad82efda5;hb=00be85f53c5bec0be00a7ed6271e1f5a38e0b534;hpb=ed06ec666e4b3dac21c4482c56e99bf7fd19b042 diff --git a/source/programcompiler.h b/source/programcompiler.h index 398bb214..8c4034d4 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -156,6 +156,29 @@ private: virtual void visit(ProgramSyntax::VariableDeclaration &); }; + 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; } + }; + struct ExpressionEvaluator: ProgramSyntax::NodeVisitor { typedef std::map ValueMap;