visit_and_inline(memacc.left);
}
+void FunctionInliner::visit(Swizzle &swizzle)
+{
+ visit_and_inline(swizzle.left);
+}
+
void FunctionInliner::visit(FunctionCall &call)
{
for(NodeArray<Expression>::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
r_trivial = false;
}
+void ExpressionInliner::visit(Swizzle &swizzle)
+{
+ visit_and_record(swizzle.left, swizzle.oper, false);
+ r_oper = swizzle.oper;
+ r_trivial = false;
+}
+
void ExpressionInliner::visit(UnaryExpression &unary)
{
SetFlag set_target(mutating, mutating || unary.oper->token[1]=='+' || unary.oper->token[1]=='-');
r_oper = 0;
visit_and_record(assign.right, assign.oper, true);
- if(assign.target_declaration)
+ if(VariableDeclaration *target_var = dynamic_cast<VariableDeclaration *>(assign.target.declaration))
{
- map<VariableDeclaration *, ExpressionInfo>::iterator i = expressions.find(assign.target_declaration);
+ map<VariableDeclaration *, ExpressionInfo>::iterator i = expressions.find(target_var);
if(i!=expressions.end())
{
/* Self-referencing assignments can't be inlined without additional
unused_nodes.erase(memacc.declaration);
}
+void UnusedVariableRemover::visit(Swizzle &swizzle)
+{
+ if(assignment_target)
+ r_assign_to_subfield = true;
+ TraversingVisitor::visit(swizzle);
+}
+
void UnusedVariableRemover::visit(UnaryExpression &unary)
{
TraversingVisitor::visit(unary);
r_assign_to_subfield = false;
r_side_effects = false;
TraversingVisitor::visit(expr);
- if(r_assignment && r_assignment->target_declaration)
- record_assignment(*r_assignment->target_declaration, expr, (r_assignment->self_referencing || r_assign_to_subfield));
+ if(r_assignment && r_assignment->target.declaration)
+ if(VariableDeclaration *target_var = dynamic_cast<VariableDeclaration *>(r_assignment->target.declaration))
+ record_assignment(*target_var, expr, (r_assignment->self_referencing || r_assign_to_subfield));
if(!r_side_effects)
unused_nodes.insert(&expr);
}