On November 19, 2014 10:09:56 PM CET, Andrew MacLeod <amacl...@redhat.com> wrote: >On 11/19/2014 03:43 PM, Richard Biener wrote: >> On November 19, 2014 8:26:23 PM CET, Andrew MacLeod ><amacl...@redhat.com> wrote: >>> On 11/19/2014 01:12 PM, David Malcolm wrote: >>> >>>> (A) could become: >>>> >>>> greturn *stmt = gsi->as_a_greturn (); >>>> >>>> (B) could become: >>>> >>>> stmt = gsi->dyn_cast <gcall *> (); >>>> if (!stmt) >>>> or: >>>> >>>> stmt = gsi->dyn_cast_gcall (); >>>> if (!stmt) >>>> >>>> or maybe: >>>> >>>> stmt = gsi->is_a_gcall (); >>>> if (!stmt) >>>> >>>> An earlier version of my patches had casting methods within the >>>> gimple_statement_base class, which were rejected; the above >proposals >>>> would instead put them within gimple_stmt_iterator. >>>> >>> I would like all gsi routines to be consistent, not a mix of >functions >>> and methods. >>> so something like >>> >>> stmt = gsi_as_call (gsi); >>> stmt = gsi_dyn_call (gsi); >>> >>> or we need to change gsi_stmt() and friends into methods and access >>> them >>> as gsi->stmt ().. which is possibly better, but that much more >>> intrusive again (another 2000+ locations). >>> If we switched to methods everywhere for gsi, I'd prefer something >like >>> gsi->as_a_call () >>> gsi->is_a_call () >>> gsi->dyn_cast_call () >>> >>> I think its more readable... and it removes a dependency on the >>> implementation.. so if we ever decide to change the name of 'gcall' >>> down >>> the road to using a namespace, and make it gimple::call or whatever, >we >>> >>> wont have to change every single gsi-> location which has a >templated >>> use of the type. >>> >>> I'm also think this sort of thing could probably wait until next >stage >>> 1.. >>> >>> my 2 cents... >> Why not as_a <gassign *> (*gsi)? It would >> Add operator* to gsi of course. >> >> Richard. >> >> > >I could live with that form too. > >we often have an instance of gimple_stmt_iterator rather than a pointer > >to it, so wouldn't "operator gimple *()" to implicitly call gsi_stmt() > >when needed work better? (or "operator gimple ()" before the next >change) ..
Not sure. The * matches how iterators work in STL... Note that for the cases where we pass a pointer to an iterator we can change those to use references to avoid writing **gsi. Richard. >Andrew