This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Trivial cleanup


On 09/27/2013 01:03 AM, Jeff Law wrote:
On 09/26/2013 08:15 AM, Michael Matz wrote:
Hi,

On Wed, 25 Sep 2013, Jeff Law wrote:

I was going to bring it up at some point too.  My preference is
strongly to simply eliminate the space on methods...
Which wouldn't be so weird: in the libstdc++-v3 code we do it all the time.
Yea. I actually reviewed the libstdc++ guidelines to see where they differed
from GNU's C guidelines.

I'm strongly in favor of dropping the horizontal whitespace between the
method name and its open paren when the result is then dereferenced.
ie foo.last()->e rather than foo.last ()->e.

I'd prefer to not write in this style at all, like Jakub.  If we must
absolutely have it, then I agree that the space before _empty_ parentheses
are ugly if followed by references.  I.e. I'd like to see spaces before
parens as is customary, except in one case: empty parens in the middle of
expressions (which don't happen very often right now in GCC, and hence
wouldn't introduce a coding style confusion):

do.this ();
give.that()->flag;
get.list (one)->clear ();

I'd prefer to not have further references to return values be applied,
though (as in, the parentheses should be the end of statement), which
would avoid the topic (at the expensive of having to invent names for
those temporaries, or to write trivial wrapper methods contracting several
method calls).
Should we consider banning dereferencing the result of a method call and instead prefer to use a more functional interface such as Jakub has suggested, or have the result of the method call put into a temporary and dereference the temporary.

I considered suggesting the latter. I wouldn't be a huge fan of the unnecessary temporaries, but they may be better than the horrid foo.last()->argh()->e->src or whatever.

Stuffing the result into a temporary does have one advantage, it encourages us to CSE across the method calls in cases where the compiler might not be able to do so. Of course, being humans, we'll probably mess it up.

jeff
I don't like the more functional interface... I thought the suggestion might be a little tongue in cheek, but wasn't sure :-) I can't imagine the number of templates that would introduce... and the impact on compile/link time would probably not be trivial.

temps would be OK with me, but there are a couple of concerns.
- I'd want to be able to declare the temps at the point of use, not the top of the function. this would actually help with clarity I think. Not sure what the current coding standard says about that. - the compiler better do an awesome job of sharing stack space for user variables in a function... I wouldn't want to blow up the stack with a bazillion unrelatd temps each wit their own location.

My example in this form would look something like:
int unsignedsrcp = ptrvar.type().type().type_unsigned();

<...>
GimpleType t1 = ptrvar.type ();
GimpleType t2 = t1.type ();
int unsignedsrcp = t2.type.unsigned ();

And yes, we'll probably introduce the odd human CSE error.. hopefully the test suite will catch them :-)

I think I still prefer matz's suggestion, but I could be on board with this one too. some expressions are crazy complicated

Andrew


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]