Refactor ir_dereference support for ir_visitor

Move the accept method for visitors from ir_dereference to the derived
classes.
This commit is contained in:
Ian Romanick
2010-05-19 13:20:12 +02:00
parent f3a002b503
commit c7b1046a9f
9 changed files with 176 additions and 104 deletions

View File

@@ -70,7 +70,9 @@ public:
virtual void visit(ir_function *);
virtual void visit(ir_expression *);
virtual void visit(ir_swizzle *);
virtual void visit(ir_dereference *);
virtual void visit(ir_dereference_variable *);
virtual void visit(ir_dereference_array *);
virtual void visit(ir_dereference_record *);
virtual void visit(ir_assignment *);
virtual void visit(ir_constant *);
virtual void visit(ir_call *);
@@ -162,11 +164,21 @@ ir_expression_flattening_visitor::visit(ir_swizzle *ir)
void
ir_expression_flattening_visitor::visit(ir_dereference *ir)
ir_expression_flattening_visitor::visit(ir_dereference_variable *ir)
{
ir->var->accept(this);
}
void
ir_expression_flattening_visitor::visit(ir_dereference_array *ir)
{
ir->selector.array_index->accept(this);
ir->var->accept(this);
}
void
ir_expression_flattening_visitor::visit(ir_dereference_record *ir)
{
if (ir->mode == ir_dereference::ir_reference_array) {
ir->selector.array_index->accept(this);
}
ir->var->accept(this);
}