X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.cpp;h=bda0dd1d7b2a0d673bcea91fc1fdbab23307ce37;hb=7a9e93a313c1fe35aa8ab4c4a3191df32fa7c9d1;hp=e508ed890c0ddc5a35c0180acdde11f7675d5f8e;hpb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;p=libs%2Fgl.git diff --git a/source/glsl/syntax.cpp b/source/glsl/syntax.cpp index e508ed89..bda0dd1d 100644 --- a/source/glsl/syntax.cpp +++ b/source/glsl/syntax.cpp @@ -73,7 +73,15 @@ Statement::Statement(): Block::Block(): - use_braces(false) + use_braces(false), + parent(0) +{ } + +Block::Block(const Block &other): + Node(other), + body(other.body), + use_braces(other.use_braces), + parent(0) { } void Block::visit(NodeVisitor &visitor) @@ -98,12 +106,42 @@ VariableReference::VariableReference(): declaration(0) { } +VariableReference::VariableReference(const VariableReference &other): + name(other.name), + declaration(0) +{ } + void VariableReference::visit(NodeVisitor &visitor) { visitor.visit(*this); } +InterfaceBlockReference::InterfaceBlockReference(): + declaration(0) +{ } + +InterfaceBlockReference::InterfaceBlockReference(const InterfaceBlockReference &other): + name(other.name), + declaration(0) +{ } + +void InterfaceBlockReference::visit(NodeVisitor &visitor) +{ + visitor.visit(*this); +} + + +MemberAccess::MemberAccess(): + declaration(0) +{ } + +MemberAccess::MemberAccess(const MemberAccess &other): + left(other.left), + member(other.member), + declaration(0) +{ } + void MemberAccess::visit(NodeVisitor &visitor) { visitor.visit(*this); @@ -131,6 +169,11 @@ Assignment::Assignment(): target_declaration(0) { } +Assignment::Assignment(const Assignment &other): + self_referencing(other.self_referencing), + target_declaration(0) +{ } + void Assignment::visit(NodeVisitor &visitor) { visitor.visit(*this); @@ -142,6 +185,13 @@ FunctionCall::FunctionCall(): constructor(false) { } +FunctionCall::FunctionCall(const FunctionCall &other): + name(other.name), + declaration(0), + constructor(other.constructor), + arguments(other.arguments) +{ } + void FunctionCall::visit(NodeVisitor &visitor) { visitor.visit(*this); @@ -196,6 +246,28 @@ VariableDeclaration::VariableDeclaration(): linked_declaration(0) { } +VariableDeclaration::VariableDeclaration(const VariableDeclaration &other): + constant(other.constant), + sampling(other.sampling), + interpolation(other.interpolation), + interface(other.interface), + precision(other.precision), + type(other.type), + type_declaration(0), + name(other.name), + array(other.array), + array_size(other.array_size), + init_expression(other.init_expression), + linked_declaration(0), + layout(other.layout) +{ } + +VariableDeclaration::~VariableDeclaration() +{ + if(linked_declaration && linked_declaration->linked_declaration==this) + linked_declaration->linked_declaration = 0; +} + void VariableDeclaration::visit(NodeVisitor &visitor) { visitor.visit(*this); @@ -203,11 +275,27 @@ void VariableDeclaration::visit(NodeVisitor &visitor) InterfaceBlock::InterfaceBlock(): - array(false) + array(false), + linked_block(0) { members.use_braces = true; } +InterfaceBlock::InterfaceBlock(const InterfaceBlock &other): + interface(other.interface), + name(other.name), + members(other.members), + instance_name(other.instance_name), + array(other.array), + linked_block(0) +{ } + +InterfaceBlock::~InterfaceBlock() +{ + if(linked_block && linked_block->linked_block==this) + linked_block->linked_block = 0; +} + void InterfaceBlock::visit(NodeVisitor &visitor) { visitor.visit(*this); @@ -222,7 +310,7 @@ FunctionDeclaration::FunctionDeclaration(const FunctionDeclaration &other): return_type(other.return_type), name(other.name), parameters(other.parameters), - definition(other.definition==&other ? this : other.definition), + definition(other.definition==&other ? this : 0), body(other.body) { } @@ -262,14 +350,20 @@ void Jump::visit(NodeVisitor &visitor) } -Stage::Stage(StageType t): +Stage::Stage(Stage::Type t): type(t), previous(0) { } +const char *Stage::get_stage_name(Type type) +{ + static const char *names[] = { "shared", "vertex", "geometry", "fragment" }; + return names[type]; +} + Module::Module(): - shared(SHARED) + shared(Stage::SHARED) { } } // namespace SL