X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.h;h=96fee471cc7e5351a59e7d51f9b3772862bcc195;hp=8681d3638a032cabd389879922fe7378c4a45a76;hb=acec85413f86c58ff262fbc26c2c1aa8726b5c58;hpb=859015dce969a0d9ba2bc603d6dbb2685159e393 diff --git a/source/programcompiler.h b/source/programcompiler.h index 8681d363..96fee471 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -116,14 +116,24 @@ private: virtual void visit(ProgramSyntax::FunctionDeclaration &); }; - struct InterfaceGenerator: Visitor + struct BlockModifier: Visitor + { + bool remove_node; + std::list insert_nodes; + + BlockModifier(); + + void flatten_block(ProgramSyntax::Block &); + void apply_and_increment(ProgramSyntax::Block &, std::list >::iterator &); + virtual void visit(ProgramSyntax::Block &); + }; + + struct InterfaceGenerator: BlockModifier { std::string in_prefix; std::string out_prefix; unsigned scope_level; std::map iface_declarations; - bool remove_node; - std::list insert_nodes; InterfaceGenerator(); @@ -161,12 +171,10 @@ private: virtual void visit(ProgramSyntax::BinaryExpression &); }; - struct ConstantConditionEliminator: Visitor + struct ConstantConditionEliminator: BlockModifier { unsigned scope_level; ExpressionEvaluator::ValueMap variable_values; - bool remove_node; - ProgramSyntax::Block *replacement_block; ConstantConditionEliminator();