X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=ac1f910d530dd7b53c984c195d3d4310d372c39f;hb=4fe225bf15048fcb7a678370f87d09f2de37031a;hp=e43b3a2d45c0e1c272976de51abd6c643cff0054;hpb=f02daac8305327d403e947e23c4f2d231eced417;p=libs%2Fgl.git diff --git a/source/programcompiler.h b/source/programcompiler.h index e43b3a2d..ac1f910d 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -246,22 +246,26 @@ private: struct UnusedVariableLocator: Visitor { - struct AssignmentList + struct VariableInfo { - std::vector nodes; - bool conditional; - bool self_referencing; + bool local; + std::vector assignments; + bool conditionally_assigned; + bool referenced; + + VariableInfo(); }; typedef std::set ResultType; - typedef std::map BlockAssignmentMap; + typedef std::map BlockVariableMap; std::set unused_nodes; std::map aggregates; ProgramSyntax::Node *aggregate; - std::vector assignments; + std::vector variables; ProgramSyntax::Assignment *assignment; bool assignment_target; + bool global_scope; UnusedVariableLocator(); @@ -272,12 +276,13 @@ private: virtual void visit(ProgramSyntax::BinaryExpression &); virtual void visit(ProgramSyntax::Assignment &); void record_assignment(ProgramSyntax::VariableDeclaration &, ProgramSyntax::Node &, bool); + void clear_assignments(VariableInfo &, bool); virtual void visit(ProgramSyntax::ExpressionStatement &); virtual void visit(ProgramSyntax::StructDeclaration &); virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::InterfaceBlock &); virtual void visit(ProgramSyntax::FunctionDeclaration &); - void merge_down_assignments(); + void merge_down_variables(); virtual void visit(ProgramSyntax::Conditional &); virtual void visit(ProgramSyntax::Iteration &); };