X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fvisitor.cpp;h=cc030eab7e31f33e71a8cb575f3013c7fdeab0df;hb=d8bdf61007978e2c3670a22a58e2f105e8347537;hp=dfe2d8d46523a00d83b024f1e13dc261db36703d;hpb=f526938b407e061c7424adedc34af4d1ff687f90;p=libs%2Fgl.git diff --git a/source/glsl/visitor.cpp b/source/glsl/visitor.cpp index dfe2d8d4..cc030eab 100644 --- a/source/glsl/visitor.cpp +++ b/source/glsl/visitor.cpp @@ -16,47 +16,54 @@ void TraversingVisitor::visit(Block &block) (*i)->visit(*this); } -void TraversingVisitor::visit(ParenthesizedExpression &parexpr) +void TraversingVisitor::visit(RefPtr &expr) { - parexpr.expression->visit(*this); + expr->visit(*this); } void TraversingVisitor::visit(MemberAccess &memacc) { - memacc.left->visit(*this); + visit(memacc.left); } void TraversingVisitor::visit(Swizzle &swizzle) { - swizzle.left->visit(*this); + visit(swizzle.left); } void TraversingVisitor::visit(UnaryExpression &unary) { - unary.expression->visit(*this); + visit(unary.expression); } void TraversingVisitor::visit(BinaryExpression &binary) { - binary.left->visit(*this); - binary.right->visit(*this); + visit(binary.left); + visit(binary.right); } void TraversingVisitor::visit(Assignment &assign) { - assign.left->visit(*this); - assign.right->visit(*this); + visit(assign.left); + visit(assign.right); +} + +void TraversingVisitor::visit(TernaryExpression &ternary) +{ + visit(ternary.condition); + visit(ternary.true_expr); + visit(ternary.false_expr); } void TraversingVisitor::visit(FunctionCall &call) { for(NodeArray::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i) - (*i)->visit(*this); + visit(*i); } void TraversingVisitor::visit(ExpressionStatement &expr) { - expr.expression->visit(*this); + visit(expr.expression); } void TraversingVisitor::visit(InterfaceLayout &layout) @@ -74,9 +81,9 @@ void TraversingVisitor::visit(VariableDeclaration &var) if(var.layout) var.layout->visit(*this); if(var.init_expression) - var.init_expression->visit(*this); + visit(var.init_expression); if(var.array_size) - var.array_size->visit(*this); + visit(var.array_size); } void TraversingVisitor::visit(InterfaceBlock &iface) @@ -96,7 +103,7 @@ void TraversingVisitor::visit(FunctionDeclaration &func) void TraversingVisitor::visit(Conditional &cond) { - cond.condition->visit(*this); + visit(cond.condition); cond.body.visit(*this); cond.else_body.visit(*this); } @@ -108,22 +115,22 @@ void TraversingVisitor::visit(Iteration &iter) if(iter.init_statement) iter.init_statement->visit(*this); if(iter.condition) - iter.condition->visit(*this); + visit(iter.condition); iter.body.visit(*this); if(iter.loop_expression) - iter.loop_expression->visit(*this); + visit(iter.loop_expression); } void TraversingVisitor::visit(Passthrough &pass) { if(pass.subscript) - pass.subscript->visit(*this); + visit(pass.subscript); } void TraversingVisitor::visit(Return &ret) { if(ret.expression) - ret.expression->visit(*this); + visit(ret.expression); } @@ -184,7 +191,7 @@ void NodeRemover::visit(InterfaceBlock &iface) { if(to_remove->count(&iface)) { - remove_from_map(stage->interface_blocks, iface.interface+iface.name, iface); + remove_from_map(stage->interface_blocks, iface.interface+iface.block_name, iface); if(!iface.instance_name.empty()) remove_from_map(stage->interface_blocks, "_"+iface.instance_name, iface); } @@ -195,7 +202,11 @@ void NodeRemover::visit(InterfaceBlock &iface) void NodeRemover::visit(FunctionDeclaration &func) { if(to_remove->count(&func)) + { remove_from_map(stage->functions, func.name, func); + if(!func.signature.empty()) + remove_from_map(stage->functions, func.name+func.signature, func); + } TraversingVisitor::visit(func); }