public:
T *operator->() { return node; }
const T *operator->() const { return node; }
+ T &operator*() { return *node; }
+ const T &operator*() const { return *node; }
operator void *() const { return node; }
};
+struct StructDeclaration;
struct VariableDeclaration;
struct Block: Node
{
std::list<NodePtr<Node> > body;
bool use_braces;
+ std::map<std::string, StructDeclaration *> types;
+ std::map<std::string, VariableDeclaration *> variables;
Block();
struct VariableReference: Expression
{
std::string name;
+ VariableDeclaration *declaration;
+
+ VariableReference();
virtual VariableReference *clone() const { return new VariableReference(*this); }
virtual void visit(NodeVisitor &);
{
NodePtr<Expression> left;
std::string member;
+ VariableDeclaration *declaration;
virtual MemberAccess *clone() const { return new MemberAccess(*this); }
virtual void visit(NodeVisitor &);
std::string sampling;
std::string interface;
std::string type;
+ StructDeclaration *type_declaration;
std::string name;
bool array;
NodePtr<Expression> array_size;
virtual void visit(Return &) { }
};
+struct TraversingVisitor: NodeVisitor
+{
+ virtual void visit(Block &);
+ virtual void visit(ParenthesizedExpression &);
+ virtual void visit(MemberAccess &);
+ virtual void visit(UnaryExpression &);
+ virtual void visit(BinaryExpression &);
+ virtual void visit(FunctionCall &);
+ virtual void visit(ExpressionStatement &);
+ virtual void visit(StructDeclaration &);
+ virtual void visit(VariableDeclaration &);
+ virtual void visit(InterfaceBlock &);
+ virtual void visit(FunctionDeclaration &);
+ virtual void visit(Conditional &);
+ virtual void visit(Iteration &);
+ virtual void visit(Return &);
+};
+
enum ContextType
{
GLOBAL,
Context vertex_context;
Context geometry_context;
Context fragment_context;
- std::map<std::string, StructDeclaration *> structs;
Module();
};