X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=6bac5386828d928ba2d9379366d48b8efb9ae020;hp=978b01e2d159135d3dcf5dbb7b0ef6b4b5bb6c0d;hb=009918a51aa309eeceb6c02ecaebe45e8d357033;hpb=961715848c111907b5f443c5b545a429b40583e6 diff --git a/source/programcompiler.h b/source/programcompiler.h index 978b01e2..6bac5386 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -90,15 +90,25 @@ private: struct UnusedVariableLocator: ProgramSyntax::TraversingVisitor { - std::set unused_variables; + ProgramSyntax::Context *context; + std::set unused_nodes; + std::map assignments; + bool assignment; + ProgramSyntax::VariableDeclaration *assignment_target; + + UnusedVariableLocator(); + void visit(ProgramSyntax::Context &); virtual void visit(ProgramSyntax::VariableReference &); virtual void visit(ProgramSyntax::MemberAccess &); + virtual void visit(ProgramSyntax::BinaryExpression &); + virtual void visit(ProgramSyntax::ExpressionStatement &); virtual void visit(ProgramSyntax::VariableDeclaration &); }; struct NodeRemover: ProgramSyntax::TraversingVisitor { + ProgramSyntax::Context *context; std::set to_remove; unsigned n_removed; bool immutable_block; @@ -106,8 +116,10 @@ private: NodeRemover(); + void visit(ProgramSyntax::Context &); virtual void visit(ProgramSyntax::Block &); virtual void visit(ProgramSyntax::StructDeclaration &); + virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::InterfaceBlock &); }; @@ -123,7 +135,8 @@ public: private: void process(); - void process(ProgramSyntax::Context &); + void generate(ProgramSyntax::Context &); + void optimize(ProgramSyntax::Context &); static void inject_block(ProgramSyntax::Block &, const ProgramSyntax::Block &); static void resolve_variables(ProgramSyntax::Context &); std::string format_context(ProgramSyntax::Context &);