virtual void visit(VariableDeclaration &);
};
+/** Determines the size and alignment of a variable, in bytes. */
+class MemoryRequirementsCalculator: private NodeVisitor
+{
+public:
+ struct Result
+ {
+ unsigned size;
+ unsigned alignment;
+
+ Result(unsigned s, unsigned a): size(s), alignment(a) { }
+ };
+private:
+ unsigned r_size;
+ unsigned r_alignment;
+ int r_offset;
+
+public:
+ Result apply(VariableDeclaration &v) { v.visit(*this); return Result(r_size, r_alignment); }
+
+private:
+ virtual void visit(BasicTypeDeclaration &);
+ virtual void visit(StructDeclaration &);
+ virtual void visit(VariableDeclaration &);
+};
+
/** Collects dependencies of a function. This includes global variables,
interface blocks, other functions and types. */
class DependencyCollector: private TraversingVisitor