Expression::Expression():
- oper(0)
+ oper(0),
+ type(0),
+ lvalue(false)
{ }
}
+Swizzle::Swizzle():
+ count(0)
+{
+ fill(components, components+4, 0);
+}
+
+void Swizzle::visit(NodeVisitor &visitor)
+{
+ visitor.visit(*this);
+}
+
+
void UnaryExpression::visit(NodeVisitor &visitor)
{
visitor.visit(*this);
Assignment::Assignment():
- self_referencing(false),
- target_declaration(0)
+ self_referencing(false)
{ }
Assignment::Assignment(const Assignment &other):
BinaryExpression(other),
- self_referencing(other.self_referencing),
- target_declaration(0)
+ self_referencing(other.self_referencing)
{ }
void Assignment::visit(NodeVisitor &visitor)
}
+Assignment::Target::Target(Statement *d):
+ declaration(d),
+ chain_len(0)
+{
+ fill(chain, chain+7, 0);
+}
+
+bool Assignment::Target::operator<(const Target &other) const
+{
+ if(declaration!=other.declaration)
+ return declaration<other.declaration;
+ for(unsigned i=0; (i<7 && i<chain_len && i<other.chain_len); ++i)
+ if(chain[i]!=other.chain[i])
+ return chain[i]<other.chain[i];
+ return chain_len<other.chain_len;
+}
+
+
FunctionCall::FunctionCall():
constructor(false),
declaration(0)
}
-StructDeclaration::StructDeclaration()
+BasicTypeDeclaration::BasicTypeDeclaration():
+ kind(ALIAS),
+ size(0),
+ base_type(0)
+{ }
+
+BasicTypeDeclaration::BasicTypeDeclaration(const BasicTypeDeclaration &other):
+ TypeDeclaration(other),
+ kind(other.kind),
+ size(other.size),
+ base(other.base),
+ base_type(0)
+{ }
+
+void BasicTypeDeclaration::visit(NodeVisitor &visitor)
+{
+ visitor.visit(*this);
+}
+
+
+ImageTypeDeclaration::ImageTypeDeclaration():
+ dimensions(TWO),
+ array(false),
+ sampled(true),
+ shadow(false)
+{ }
+
+void ImageTypeDeclaration::visit(NodeVisitor &visitor)
+{
+ visitor.visit(*this);
+}
+
+
+StructDeclaration::StructDeclaration():
+ interface_block(0)
{
members.use_braces = true;
}
+StructDeclaration::StructDeclaration(const StructDeclaration &other):
+ TypeDeclaration(other),
+ members(other.members),
+ interface_block(0)
+{ }
+
+StructDeclaration::~StructDeclaration()
+{
+ if(interface_block && interface_block->struct_declaration==this)
+ interface_block->struct_declaration = 0;
+}
+
void StructDeclaration::visit(NodeVisitor &visitor)
{
visitor.visit(*this);
InterfaceBlock::InterfaceBlock():
array(false),
+ type_declaration(0),
+ struct_declaration(0),
linked_block(0)
-{
- members.use_braces = true;
-}
+{ }
InterfaceBlock::InterfaceBlock(const InterfaceBlock &other):
Statement(other),
members(other.members),
instance_name(other.instance_name),
array(other.array),
+ type_declaration(0),
+ struct_declaration(0),
linked_block(0)
{ }
{
if(linked_block && linked_block->linked_block==this)
linked_block->linked_block = 0;
+ if(struct_declaration && struct_declaration->interface_block==this)
+ struct_declaration->interface_block = 0;
}
void InterfaceBlock::visit(NodeVisitor &visitor)
FunctionDeclaration::FunctionDeclaration():
- definition(0)
+ definition(0),
+ return_type_declaration(0)
{ }
FunctionDeclaration::FunctionDeclaration(const FunctionDeclaration &other):
name(other.name),
parameters(other.parameters),
body(other.body),
- definition(other.definition==&other ? this : 0)
+ signature(other.signature),
+ definition(other.definition==&other ? this : 0),
+ return_type_declaration(0)
{ }
void FunctionDeclaration::visit(NodeVisitor &visitor)