X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=7e8d3373a53e4ffcf028a218d99e420d1a9cd5a7;hp=d7b8a8701ff0f8687cf871e59f000ba18c134ed2;hb=bfeb6c6404659fffb1222e084b0bd08cccb4e67d;hpb=35646cafcdff8be76f6ef96018415d9ddec6f77c diff --git a/source/programcompiler.h b/source/programcompiler.h index d7b8a870..7e8d3373 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -29,7 +29,7 @@ private: struct BlockModifier: Visitor { bool remove_node; - std::list > insert_nodes; + std::vector > insert_nodes; BlockModifier(); @@ -81,9 +81,9 @@ private: template struct NodeGatherer: Visitor { - typedef std::list ResultType; + typedef std::vector ResultType; - std::list nodes; + std::vector nodes; const ResultType &get_result() const { return nodes; } using Visitor::visit; @@ -158,13 +158,6 @@ private: virtual void visit(ProgramSyntax::Passthrough &); }; - struct VariableRenamer: Visitor - { - using Visitor::visit; - virtual void visit(ProgramSyntax::VariableReference &); - virtual void visit(ProgramSyntax::VariableDeclaration &); - }; - struct DeclarationReorderer: Visitor { enum DeclarationKind @@ -176,17 +169,21 @@ private: FUNCTION }; + unsigned scope_level; DeclarationKind kind; + std::set ordered_funcs; + std::set needed_funcs; DeclarationReorderer(); using Visitor::visit; virtual void visit(ProgramSyntax::Block &); + virtual void visit(ProgramSyntax::FunctionCall &); 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::VariableDeclaration &); virtual void visit(ProgramSyntax::InterfaceBlock &) { kind = VARIABLE; } - virtual void visit(ProgramSyntax::FunctionDeclaration &) { kind = FUNCTION; } + virtual void visit(ProgramSyntax::FunctionDeclaration &); }; struct InlineableFunctionLocator: Visitor