emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: GNU bug Tracking System
Subject: bug#61481: closed (CC Mode 5.35.2 (C/*l); _Generic unsupported)
Date: Fri, 17 Feb 2023 09:29:02 +0000

Your message dated Fri, 17 Feb 2023 09:28:49 +0000
with message-id <Y+9I0aO8DdIoPfWT@ACM>
and subject line Re: bug#61481: CC Mode 5.35.2 (C/*l); _Generic unsupported
has caused the debbugs.gnu.org bug report #61481,
regarding CC Mode 5.35.2 (C/*l); _Generic unsupported
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
61481: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=61481
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: CC Mode 5.35.2 (C/*l); _Generic unsupported Date: Mon, 13 Feb 2023 23:25:43 +0800
Package: cc-mode

2011 Standard C has a feature that works like `switch', except on the
type of an expression and with different syntax.

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.

Emacs  : GNU Emacs 29.0.60 (build 1, x86_64-pc-linux-gnu)
 of 2022-12-24
Package: CC Mode 5.35.2 (C/*l)
Buffer Style: gnu
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes 
gen-string-delim gen-comment-delim syntax-properties category-properties 1-bit)

current state:
==============
(setq
 c-basic-offset 2
 c-comment-only-line-offset '(0 . 0)
 c-indent-comment-alist '((anchored-comment column . 0) (end-block space . 1) 
(cpp-end-block space . 2))
 c-indent-comments-syntactically-p nil
 c-block-comment-prefix ""
 c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") 
(other . "//+\\|\\**"))
 c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc) (c-mode . 
gtkdoc) (c++-mode . gtkdoc))
 c-cleanup-list '(scope-operator)
 c-hanging-braces-alist '((substatement-open before after) 
(arglist-cont-nonempty))
 c-hanging-colons-alist nil
 c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
 c-backslash-column 48
 c-backslash-max-column 72
 c-special-indent-hook '(t c-gnu-impose-minimum)
 c-label-minimum-indentation 1
 c-offsets-alist '((inexpr-class . +)
                   (inexpr-statement . +)
                   (lambda-intro-cont . +)
                   (inlambda . 0)
                   (template-args-cont c-lineup-template-args +)
                   (incomposition . +)
                   (inmodule . +)
                   (innamespace . +)
                   (inextern-lang . +)
                   (composition-close . 0)
                   (module-close . 0)
                   (namespace-close . 0)
                   (extern-lang-close . 0)
                   (composition-open . 0)
                   (module-open . 0)
                   (namespace-open . 0)
                   (extern-lang-open . 0)
                   (objc-method-call-cont c-lineup-ObjC-method-call-colons 
c-lineup-ObjC-method-call +)
                   (objc-method-args-cont . c-lineup-ObjC-method-args)
                   (objc-method-intro . [0])
                   (friend . 0)
                   (cpp-define-intro c-lineup-cpp-define +)
                   (cpp-macro-cont . +)
                   (cpp-macro . [0])
                   (inclass . +)
                   (stream-op . c-lineup-streamop)
                   (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist)
                   (arglist-cont c-lineup-gcc-asm-reg 0)
                   (comment-intro c-lineup-knr-region-comment c-lineup-comment)
                   (catch-clause . 0)
                   (else-clause . 0)
                   (do-while-closure . 0)
                   (access-label . -)
                   (case-label . 0)
                   (substatement . +)
                   (statement-case-intro . +)
                   (statement . 0)
                   (brace-entry-open . 0)
                   (brace-list-entry . 0)
                   (brace-list-close . 0)
                   (block-close . 0)
                   (block-open . 0)
                   (inher-cont . c-lineup-multi-inher)
                   (inher-intro . +)
                   (member-init-cont . c-lineup-multi-inher)
                   (member-init-intro . +)
                   (annotation-var-cont . +)
                   (annotation-top-cont . 0)
                   (topmost-intro . 0)
                   (knr-argdecl . 0)
                   (func-decl-cont . +)
                   (inline-close . 0)
                   (class-close . 0)
                   (class-open . 0)
                   (defun-block-intro . +)
                   (defun-close . 0)
                   (defun-open . 0)
                   (c . c-lineup-C-comments)
                   (string . c-lineup-dont-change)
                   (topmost-intro-cont first c-lineup-topmost-intro-cont 
c-lineup-gnu-DEFUN-intro-cont)
                   (brace-list-intro first c-lineup-2nd-brace-entry-in-arglist 
c-lineup-class-decl-init-+ +)
                   (brace-list-open . +)
                   (inline-open . 0)
                   (arglist-close . c-lineup-arglist)
                   (arglist-intro . c-lineup-arglist-intro-after-paren)
                   (statement-cont . +)
                   (statement-case-open . +)
                   (label . 0)
                   (substatement-label . 0)
                   (substatement-open . +)
                   (knr-argdecl-intro . 5)
                   (statement-block-intro . +)
                   )
 c-buffer-is-cc-mode 'c-mode
 c-tab-always-indent t
 c-syntactic-indentation t
 c-syntactic-indentation-in-macros t
 c-ignore-auto-fill '(string cpp code)
 c-auto-align-backslashes t
 c-backspace-function 'backward-delete-char-untabify
 c-delete-function 'delete-char
 c-electric-pound-behavior nil
 c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
 c-enable-xemacs-performance-kludge-p nil
 c-old-style-variable-behavior nil
 defun-prompt-regexp nil
 tab-width 8
 comment-column 32
 parse-sexp-ignore-comments t
 parse-sexp-lookup-properties t
 auto-fill-function nil
 comment-multi-line t
 comment-start-skip "\\(?://+\\|/\\*+\\)\\s *"
 fill-prefix nil
 fill-column 70
 paragraph-start "[     ]*\\(//+\\|\\**\\)[     ]*$\\|^\f"
 adaptive-fill-mode t
 adaptive-fill-regexp "[        ]*\\(//+\\|\\**\\)[     ]*\\([  
]*\\([-–!|#%;>*·•‣⁃◦]+[         ]*\\)*\\)"
 )



--- End Message ---
--- Begin Message --- Subject: Re: bug#61481: CC Mode 5.35.2 (C/*l); _Generic unsupported Date: Fri, 17 Feb 2023 09:28:49 +0000
Hello, Po.

On Fri, Feb 17, 2023 at 10:33:45 +0800, Po Lu wrote:
> Alan Mackenzie <acm@muc.de> writes:

[ .... ]

> > 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.

OK.  I've enhanced it a fair bit since yesterday, in particular, the
types now get fontified as types.

I've committed that patch, and I'm closing the bug with this post.

-- 
Alan Mackenzie (Nuremberg, Germany).


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]