[PATCH] Start to unify contextual keywords
Alp Toker
alp at nuanti.com
Tue Dec 17 08:31:36 PST 2013
Landed in r197496 with the extra check.
Will be looking to unify handling of virt-specifiers, altivec and objc
context-sensitive keywords next, and then revisit this when we have an
idea of how it all fits together.
So far I've got a preliminary annotator for virt-specifiers and the
results are promising, with a small bonus that we'll soon have syntax
highlighting for all contextual keywords :-)
Alp.
On 13/12/2013 14:02, Alp Toker wrote:
>
> 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