virtual void visit(ProgramSyntax::FunctionDeclaration &);
};
- struct InterfaceGenerator: Visitor
+ struct BlockModifier: Visitor
+ {
+ bool remove_node;
+ std::list<ProgramSyntax::Node *> insert_nodes;
+
+ BlockModifier();
+
+ void flatten_block(ProgramSyntax::Block &);
+ void apply_and_increment(ProgramSyntax::Block &, std::list<ProgramSyntax::NodePtr<ProgramSyntax::Node> >::iterator &);
+ virtual void visit(ProgramSyntax::Block &);
+ };
+
+ struct InterfaceGenerator: BlockModifier
{
std::string in_prefix;
std::string out_prefix;
unsigned scope_level;
std::map<std::string, ProgramSyntax::VariableDeclaration *> iface_declarations;
- bool remove_node;
- std::list<ProgramSyntax::Node *> insert_nodes;
InterfaceGenerator();
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();