diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-05-19 12:02:19 +0200 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-05-26 15:23:25 -0700 |
commit | f3a002b503542fe2544025c6a42d552fdc4907c2 (patch) | |
tree | 647f6bba599e317ced48e8f484f4933b6708e1fb /ir_hv_accept.cpp | |
parent | 70fe8b66632f4afd87ebb12a450b1e639428e88f (diff) |
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.
Diffstat (limited to 'ir_hv_accept.cpp')
-rw-r--r-- | ir_hv_accept.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/ir_hv_accept.cpp b/ir_hv_accept.cpp index 43422e84aa..08f5394314 100644 --- a/ir_hv_accept.cpp +++ b/ir_hv_accept.cpp @@ -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); |