1 #include "programsyntax.h"
7 namespace ProgramSyntax {
13 void Block::visit(NodeVisitor &visitor)
19 void Literal::visit(NodeVisitor &visitor)
25 void ParenthesizedExpression::visit(NodeVisitor &visitor)
31 VariableReference::VariableReference():
35 void VariableReference::visit(NodeVisitor &visitor)
41 void MemberAccess::visit(NodeVisitor &visitor)
47 UnaryExpression::UnaryExpression():
51 void UnaryExpression::visit(NodeVisitor &visitor)
57 BinaryExpression::BinaryExpression():
61 void BinaryExpression::visit(NodeVisitor &visitor)
67 FunctionCall::FunctionCall():
71 void FunctionCall::visit(NodeVisitor &visitor)
77 void ExpressionStatement::visit(NodeVisitor &visitor)
83 void Layout::visit(NodeVisitor &visitor)
89 StructDeclaration::StructDeclaration()
91 members.use_braces = true;
94 void StructDeclaration::visit(NodeVisitor &visitor)
100 VariableDeclaration::VariableDeclaration():
104 linked_declaration(0)
107 void VariableDeclaration::visit(NodeVisitor &visitor)
109 visitor.visit(*this);
113 InterfaceBlock::InterfaceBlock()
115 members.use_braces = true;
118 void InterfaceBlock::visit(NodeVisitor &visitor)
120 visitor.visit(*this);
124 FunctionDeclaration::FunctionDeclaration():
128 void FunctionDeclaration::visit(NodeVisitor &visitor)
130 visitor.visit(*this);
134 void Conditional::visit(NodeVisitor &visitor)
136 visitor.visit(*this);
140 void Passthrough::visit(NodeVisitor &visitor)
142 visitor.visit(*this);
146 void Return::visit(NodeVisitor &visitor)
148 visitor.visit(*this);
152 void Iteration::visit(NodeVisitor &visitor)
154 visitor.visit(*this);
158 void TraversingVisitor::visit(Block &block)
160 for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
164 void TraversingVisitor::visit(ParenthesizedExpression &parexpr)
166 parexpr.expression->visit(*this);
169 void TraversingVisitor::visit(MemberAccess &memacc)
171 memacc.left->visit(*this);
174 void TraversingVisitor::visit(UnaryExpression &unary)
176 unary.expression->visit(*this);
179 void TraversingVisitor::visit(BinaryExpression &binary)
181 binary.left->visit(*this);
182 binary.right->visit(*this);
185 void TraversingVisitor::visit(FunctionCall &call)
187 for(vector<NodePtr<Expression> >::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
191 void TraversingVisitor::visit(ExpressionStatement &expr)
193 expr.expression->visit(*this);
196 void TraversingVisitor::visit(StructDeclaration &strct)
198 strct.members.visit(*this);
201 void TraversingVisitor::visit(VariableDeclaration &var)
203 if(var.init_expression)
204 var.init_expression->visit(*this);
206 var.array_size->visit(*this);
209 void TraversingVisitor::visit(InterfaceBlock &iface)
211 iface.members.visit(*this);
214 void TraversingVisitor::visit(FunctionDeclaration &func)
216 for(vector<NodePtr<VariableDeclaration> >::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
218 func.body.visit(*this);
221 void TraversingVisitor::visit(Conditional &cond)
223 cond.condition->visit(*this);
224 cond.body.visit(*this);
225 cond.else_body.visit(*this);
228 void TraversingVisitor::visit(Iteration &iter)
230 iter.init_statement->visit(*this);
232 iter.condition->visit(*this);
233 if(iter.loop_expression)
234 iter.loop_expression->visit(*this);
235 iter.body.visit(*this);
238 void TraversingVisitor::visit(Passthrough &pass)
241 pass.subscript->visit(*this);
244 void TraversingVisitor::visit(Return &ret)
247 ret.expression->visit(*this);
251 Stage::Stage(StageType t):
260 vertex_stage(VERTEX),
261 geometry_stage(GEOMETRY),
262 fragment_stage(FRAGMENT)
265 } // namespace ProgramSyntax