1 #ifndef MSP_GL_SL_REFLECT_H_
2 #define MSP_GL_SL_REFLECT_H_
10 /** Determines the number of interface locations required by a variable. */
11 class LocationCounter: private NodeVisitor
19 unsigned apply(VariableDeclaration &v) { v.visit(*this); return r_count; }
22 virtual void visit(BasicTypeDeclaration &);
23 virtual void visit(ImageTypeDeclaration &);
24 virtual void visit(StructDeclaration &);
25 virtual void visit(VariableDeclaration &);
28 /** Determines the size and alignment of a variable, in bytes. */
29 class MemoryRequirementsCalculator: private NodeVisitor
37 Result(unsigned s, unsigned a): size(s), alignment(a) { }
45 Result apply(VariableDeclaration &v) { v.visit(*this); return Result(r_size, r_alignment); }
48 virtual void visit(BasicTypeDeclaration &);
49 virtual void visit(StructDeclaration &);
50 virtual void visit(VariableDeclaration &);
53 /** Collects dependencies of a function. This includes global variables,
54 interface blocks, other functions and types. */
55 class DependencyCollector: private TraversingVisitor
58 std::set<Node *> dependencies;
59 std::set<Node *> locals;
62 std::set<Node *> apply(FunctionDeclaration &);
65 virtual void visit(VariableReference &);
66 virtual void visit(InterfaceBlockReference &);
67 virtual void visit(FunctionCall &);
68 virtual void visit(VariableDeclaration &);