Subject: Re: bug#61481: CC Mode 5.35.2 (C/*l); _Generic unsupported

From: Po Lu <[email-masked]>
Date: Fri, 17 Feb 2023 10:33:45 +0800

Alan Mackenzie <[email-masked]> writes:

> Hello, Po.
>
> On Mon, Feb 13, 2023 at 23:25:43 +0800, Po Lu via CC-Mode-help wrote:
>> Package: cc-mode
>
>> 2011 Standard C has a feature that works like `switch', except on the
>> type of an expression and with different syntax.
>
> Yuck!  How on Earth did something like this get included in the
> standard?  It's not used often (I wasn't aware of it until three days
> ago), it's wholly unlike anything else in C, and just takes up effort
> from compiler and editor maintainers.
>
>> Today, I had to figure out how to port some code written with that in
>> mind to ANSI C, and surprisingly enough, found that CC Mode does not
>> support that feature at all.
>
> :-)
>
>> Code making use of _Generic looks more or less like this:
>
>> {
>>   const char *typename = _Generic ((expr),
>> 				   const char *:
>> 				     "const char *",
>> 				   int:
>> 				     "int",
>> 				   unsigned long:
>> 				     "unsigned long"
>> 				   default:
>> 				     NULL);
>> }
>
>> where `typename' is set to an appropriate value based on the type of the
>> expression ``expr''.
>
>> CC Mode already works remarkably well, but it should be taught to indent
>> the cases separately from the values.
>
> Thanks!
>
> I've made a first patch for this, which is fairly crude.  It handles
> only the indentation, not the fontification, which will be more
> difficult.
>
> Would you please try out the attached patch, and let me know how well it
> does the job.  Thanks!
>
> [ .... ]

Thanks, Alan.

I finished working on that code by now, so I have nothing to test it on.
If it works for you, please install, thanks.