-/** Resolves function declarations and calls. */
-class FunctionResolver: private TraversingVisitor
-{
-private:
- Stage *stage;
- std::map<std::string, std::vector<FunctionDeclaration *> > declarations;
- bool r_any_resolved;
-
-public:
- bool apply(Stage &);
-
-private:
- virtual void visit(FunctionCall &);
- virtual void visit(FunctionDeclaration &);
-};
-
-/** Materializes implicitly declared interfaces.
-
-Out variable declarations inside functions are moved to the global scope.
-
-Passthrough statements are processed, generating out variables to match in
-variables and copying values.
-
-Unresolved variables are looked up in the previous stage's out variables. */
-class InterfaceGenerator: private TraversingVisitor
-{
-private:
- Stage *stage;
- std::string in_prefix;
- std::string out_prefix;
- bool function_scope;
- InterfaceBlock *iface_block;
- bool copy_block;
- Block *iface_target_block;
- NodeList<Statement>::iterator iface_insert_point;
- NodeList<Statement>::iterator assignment_insert_point;
- std::set<Node *> nodes_to_remove;
-
-public:
- InterfaceGenerator();
-
- void apply(Stage &);
-
-private:
- static std::string get_out_prefix(Stage::Type);
- std::string change_prefix(const std::string &, const std::string &) const;
- virtual void visit(Block &);
- VariableDeclaration *generate_interface(VariableDeclaration &, const std::string &, const std::string &);
- InterfaceBlock *generate_interface(InterfaceBlock &);
- ExpressionStatement &insert_assignment(const std::string &, Expression *);
- virtual void visit(VariableReference &);
- virtual void visit(VariableDeclaration &);
- virtual void visit(InterfaceBlock &);
- virtual void visit(FunctionDeclaration &);
- virtual void visit(Passthrough &);
-};
-