X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=829f75358cdd08695d16730184f109cc03e5c0d6;hb=49717d5554becc07a4fafa4f1cbf85ac6ca13907;hp=db7aefe9ac3762a9234cd88d4b614dfc4c56ccd0;hpb=7cd066816f7faab6f8f0eba1fca4dee67ee5dc3b;p=libs%2Fgl.git diff --git a/source/programcompiler.h b/source/programcompiler.h index db7aefe9..829f7535 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -72,7 +72,7 @@ private: std::string in_prefix; std::string out_prefix; unsigned scope_level; - std::map iface_declarations; + std::map iface_declarations; bool remove_node; std::list insert_nodes; @@ -98,9 +98,14 @@ private: struct UnusedVariableLocator: Visitor { std::set unused_nodes; + std::map aggregates; + ProgramSyntax::Node *aggregate; std::map assignments; bool assignment; + bool record_target; ProgramSyntax::VariableDeclaration *assignment_target; + bool indeterminate_target; + bool self_referencing; UnusedVariableLocator(); @@ -108,22 +113,17 @@ private: virtual void visit(ProgramSyntax::MemberAccess &); virtual void visit(ProgramSyntax::BinaryExpression &); virtual void visit(ProgramSyntax::ExpressionStatement &); + virtual void visit(ProgramSyntax::StructDeclaration &); virtual void visit(ProgramSyntax::VariableDeclaration &); + virtual void visit(ProgramSyntax::InterfaceBlock &); }; struct NodeRemover: Visitor { std::set to_remove; - unsigned n_removed; - bool immutable_block; - bool remove_block; - - NodeRemover(); virtual void visit(ProgramSyntax::Block &); - virtual void visit(ProgramSyntax::StructDeclaration &); virtual void visit(ProgramSyntax::VariableDeclaration &); - virtual void visit(ProgramSyntax::InterfaceBlock &); }; ProgramParser parser; @@ -139,7 +139,7 @@ public: private: void process(); void generate(ProgramSyntax::Stage &); - void optimize(ProgramSyntax::Stage &); + bool optimize(ProgramSyntax::Stage &); static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); template static void apply(ProgramSyntax::Stage &);