}
-Statement::Statement():
- source(GENERATED_SOURCE),
- line(1)
-{ }
-
-
Block::Block():
use_braces(false),
parent(0)
Expression::Expression():
- oper(0)
+ oper(0),
+ type(0),
+ lvalue(false)
{ }
}
-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)
+ definition(other.definition==&other ? this : 0),
+ return_type_declaration(0)
{ }
void FunctionDeclaration::visit(NodeVisitor &visitor)