bool array;
NodePtr<Expression> array_size;
NodePtr<Expression> init_expression;
+ VariableDeclaration *linked_declaration;
VariableDeclaration();
virtual void visit(NodeVisitor &);
};
+struct Passthrough: Node
+{
+ NodePtr<Expression> subscript;
+
+ virtual Passthrough *clone() const { return new Passthrough(*this); }
+ virtual void visit(NodeVisitor &);
+};
+
struct Return: Node
{
NodePtr<Expression> expression;
virtual void visit(FunctionDeclaration &) { }
virtual void visit(Conditional &) { }
virtual void visit(Iteration &) { }
+ virtual void visit(Passthrough &) { }
virtual void visit(Return &) { }
};
virtual void visit(FunctionDeclaration &);
virtual void visit(Conditional &);
virtual void visit(Iteration &);
+ virtual void visit(Passthrough &);
virtual void visit(Return &);
};
-enum ContextType
+enum StageType
{
- GLOBAL,
+ SHARED,
VERTEX,
GEOMETRY,
FRAGMENT
};
-struct Context
+struct Stage
{
- ContextType type;
+ StageType type;
bool present;
+ Stage *previous;
ProgramSyntax::Block content;
+ std::map<std::string, VariableDeclaration *> in_variables;
+ std::map<std::string, VariableDeclaration *> out_variables;
- Context(ContextType);
+ Stage(StageType);
};
struct Module
{
- Context global_context;
- Context vertex_context;
- Context geometry_context;
- Context fragment_context;
+ Stage shared;
+ Stage vertex_stage;
+ Stage geometry_stage;
+ Stage fragment_stage;
Module();
};