+ struct InterfaceGenerator: Visitor
+ {
+ 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();
+
+ static std::string get_out_prefix(ProgramSyntax::StageType);
+ virtual void apply(ProgramSyntax::Stage &);
+ virtual void visit(ProgramSyntax::Block &);
+ std::string change_prefix(const std::string &, const std::string &) const;
+ bool generate_interface(ProgramSyntax::VariableDeclaration &, const std::string &, const std::string &);
+ void insert_assignment(const std::string &, ProgramSyntax::Expression *);
+ virtual void visit(ProgramSyntax::VariableReference &);
+ virtual void visit(ProgramSyntax::VariableDeclaration &);
+ virtual void visit(ProgramSyntax::Passthrough &);
+ };
+
+ struct VariableRenamer: Visitor