9 LocationCounter::LocationCounter():
13 void LocationCounter::visit(BasicTypeDeclaration &basic)
15 r_count = basic.kind==BasicTypeDeclaration::MATRIX ? basic.size>>16 : 1;
18 void LocationCounter::visit(ImageTypeDeclaration &)
23 void LocationCounter::visit(StructDeclaration &strct)
26 for(NodeList<Statement>::const_iterator i=strct.members.body.begin(); i!=strct.members.body.end(); ++i)
35 void LocationCounter::visit(VariableDeclaration &var)
38 if(var.type_declaration)
39 var.type_declaration->visit(*this);
41 if(const Literal *literal = dynamic_cast<const Literal *>(var.array_size.get()))
42 if(literal->value.check_type<int>())
43 r_count *= literal->value.value<int>();
47 set<Node *> DependencyCollector::apply(FunctionDeclaration &func)
53 void DependencyCollector::visit(VariableReference &var)
55 if(var.declaration && !locals.count(var.declaration))
57 dependencies.insert(var.declaration);
58 var.declaration->visit(*this);
62 void DependencyCollector::visit(InterfaceBlockReference &iface)
66 dependencies.insert(iface.declaration);
67 iface.declaration->visit(*this);
71 void DependencyCollector::visit(FunctionCall &call)
74 dependencies.insert(call.declaration);
75 TraversingVisitor::visit(call);
78 void DependencyCollector::visit(VariableDeclaration &var)
81 if(var.type_declaration)
83 dependencies.insert(var.type_declaration);
84 var.type_declaration->visit(*this);
87 TraversingVisitor::visit(var);