#include "reflect.h"
+using namespace std;
+
namespace Msp {
namespace GL {
namespace SL {
r_count *= literal->value.value<int>();
}
+
+set<Node *> DependencyCollector::apply(FunctionDeclaration &func)
+{
+ func.visit(*this);
+ return dependencies;
+}
+
+void DependencyCollector::visit(VariableReference &var)
+{
+ if(var.declaration && !locals.count(var.declaration))
+ {
+ dependencies.insert(var.declaration);
+ var.declaration->visit(*this);
+ }
+}
+
+void DependencyCollector::visit(InterfaceBlockReference &iface)
+{
+ if(iface.declaration)
+ {
+ dependencies.insert(iface.declaration);
+ iface.declaration->visit(*this);
+ }
+}
+
+void DependencyCollector::visit(FunctionCall &call)
+{
+ if(call.declaration)
+ dependencies.insert(call.declaration);
+ TraversingVisitor::visit(call);
+}
+
+void DependencyCollector::visit(VariableDeclaration &var)
+{
+ locals.insert(&var);
+ if(var.type_declaration)
+ {
+ dependencies.insert(var.type_declaration);
+ var.type_declaration->visit(*this);
+ }
+
+ TraversingVisitor::visit(var);
+}
+
} // namespace SL
} // namespace GL
} // namespace Msp