|
From: | Paul Eggert |
Subject: | Re: RFC: generate the default semantic action |
Date: | Sun, 14 Oct 2018 19:31:39 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
Akim Demaille wrote:
This patch is prompted by C++, but I believe it’s a real improvement even for the other languages. However, it does mean that the default action is now made twice in C for instance. I would very much like to disable the pre-initialization of $$ to $1, but I’m afraid people might depend on this…
As I recall, in the traditional Yacc implementation the default '$$ = $1;' action was implemented by doing nothing (i.e., zero C code and zero machine instructions), as $1 was the top value on the stack, so popping and pushing the stack was a no-op.
I also recall that at some point Bison put in an explicit '$$ = $1;', run before any action, because otherwise GCC complained in some cases (I think about uninitialized variables).
I don't know the motivation for doing the equivalent of '$$ = $1;' both before all actions, and explicitly for missing actions. I'm skeptical that we should do both, because in that case I expect that we'll miss some useful opportunities for GCC to generate warnings about uninitialized variables.
User code should not depend on any of these details; it should work even if we went back to the Yacc way of doing things, for C. Also, I wouldn't worry about any C code that does depend on these details, as I doubt whether there is any. So for the benefit of GCC warnings, I suggest just doing things the new way.
[Prev in Thread] | Current Thread | [Next in Thread] |