[PATCH] Start to unify contextual keywords
Alp Toker
alp at nuanti.com
Fri Dec 13 06:02:13 PST 2013
On 12/12/2013 20:47, Richard Smith wrote:
> I like the simplification here.
>
> + if (TagType == DeclSpec::TST_struct && Tok.isNot(tok::identifier)) {
> + const IdentifierInfo *II = Tok.getIdentifierInfo();
>
> This will assert if there's an annotation token here (that might
> happen if we've done some tentative parsing and annotated a nested
> name specifier).
Good catch. I'll shore it up.
>
>
> The reverting-and-unreverting mechanism here seems unsatisfying.
> Perhaps we should redesign this somewhat. How about changing the
> semantics to be simply that these tokens are always normal
> identifiers, except when they're followed by a left paren (in the case
> where your patch calls TryIdentKeywordUpgrade).
>
> Specifically, something like: change the RevertedTokenID flag on Token
> to a ContextualKeyword flag or similar, set the kind to
> tok::identifier by default for these traits, and generate a
> StringSwitch in TryIdentKeywordUpgrade to pick the right kind. Then we
> can drop the TryKeywordIdentFallback hack entirely -- the semantics
> would be simply that these identifiers are normal identifiers unless
> they're followed by a left paren.
Agree that it's unsatisfying. I've encapsulated the behaviour into these
two functions exactly so we can experiment with techniques like that.
The approach you describe makes sense for many of the contextual
keywords, but for type traits specifically I suspect it may make sense
to tidy and refine the current approach. If we end up making these names
globally available as identifiers, user code is going to start using
them and that's going to become a portability headaches. So it could go
either way but I'd like to investigate that on a separate schedule,
tending towards "less magic" for now.
Either solution should help put an end to the cat-and-mouse game between
libc++, libstdc++, MSVC and Embarcadero fighting over the __is_ and
__has_ namespace.
Let's revisit this once I've unified the other kinds of
context-sensitive keywords so we can compare the merits of each approach.
Alp.
>
>
> On Thu, Dec 12, 2013 at 6:46 AM, Alp Toker <alp at nuanti.com
> <mailto:alp at nuanti.com>> wrote:
>
> Hi,
>
> Now that we emit diagnostics for keyword-as-identifier hacks
> (-Wkeyword-compat) we can go ahead and simplify some of the old
> revertible keyword support.
>
> This patch adds a TryIdentKeywordUpgrade() function to mirror the
> recently added TryKeywordIdentFallback(), and uses it to replace
> hard-coded REVERTIBLE_TYPE_TRAITs.
>
> The mid-term goal is to work with libc++ to remove dependence on
> the GNU token hacks, and to unify context-sensitive keyword
> handing in the C++ frontend.
>
> 4 files changed, 43 insertions(+), 70 deletions(-)
>
> Alp.
>
> --
> http://www.nuanti.com
> the browser experts
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu <mailto:cfe-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
--
http://www.nuanti.com
the browser experts
More information about the cfe-commits
mailing list