Refactor ir_dereference support for ir_hierarchical_visitor
Move the accept method for hierarchical visitors from ir_dereference to the derived classes. This was mostly straight-forward, but I suspect that ir_dead_code_local may be broken now.
This commit is contained in:
+22
-6
@@ -170,18 +170,34 @@ ir_swizzle::accept(ir_hierarchical_visitor *v)
|
||||
|
||||
|
||||
ir_visitor_status
|
||||
ir_dereference::accept(ir_hierarchical_visitor *v)
|
||||
ir_dereference_variable::accept(ir_hierarchical_visitor *v)
|
||||
{
|
||||
return v->visit(this);
|
||||
}
|
||||
|
||||
|
||||
ir_visitor_status
|
||||
ir_dereference_array::accept(ir_hierarchical_visitor *v)
|
||||
{
|
||||
ir_visitor_status s = v->visit_enter(this);
|
||||
if (s != visit_continue)
|
||||
return (s == visit_continue_with_parent) ? visit_continue : s;
|
||||
|
||||
if (this->mode == ir_reference_array) {
|
||||
s = this->selector.array_index->accept(v);
|
||||
if (s != visit_continue)
|
||||
return (s == visit_continue_with_parent) ? visit_continue : s;
|
||||
}
|
||||
s = this->selector.array_index->accept(v);
|
||||
if (s != visit_continue)
|
||||
return (s == visit_continue_with_parent) ? visit_continue : s;
|
||||
|
||||
s = this->var->accept(v);
|
||||
return (s == visit_stop) ? s : v->visit_leave(this);
|
||||
}
|
||||
|
||||
|
||||
ir_visitor_status
|
||||
ir_dereference_record::accept(ir_hierarchical_visitor *v)
|
||||
{
|
||||
ir_visitor_status s = v->visit_enter(this);
|
||||
if (s != visit_continue)
|
||||
return (s == visit_continue_with_parent) ? visit_continue : s;
|
||||
|
||||
s = this->var->accept(v);
|
||||
return (s == visit_stop) ? s : v->visit_leave(this);
|
||||
|
||||
Reference in New Issue
Block a user