+/** Collects declarations referenced by a function. */
+class InlineDependencyCollector: private TraversingVisitor
+{
+private:
+ std::set<Node *> dependencies;
+
+public:
+ const std::set<Node *> &apply(FunctionDeclaration &f) { f.visit(*this); return dependencies; }
+
+private:
+ virtual void visit(VariableReference &);
+ virtual void visit(InterfaceBlockReference &);
+ virtual void visit(FunctionCall &);
+ virtual void visit(VariableDeclaration &);
+};
+
+/** Inlines functions. Internally uses InlineableFunctionLocator to find
+candidate functions. Only functions which consist of a single return statement
+are inlined. */