GNU bug report logs - #57075
CC Mode 5.35.1 (C/*l); Leaky fontification of xterm.c with font-lock-maximum-decoration set to 2

Previous Next

Package: cc-mode;

Reported by: Po Lu <luangruo <at> yahoo.com>

Date: Tue, 9 Aug 2022 12:32:02 UTC

Severity: normal

To reply to this bug, email your comments to 57075 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-cc-mode <at> gnu.org:
bug#57075; Package cc-mode. (Tue, 09 Aug 2022 12:32:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Po Lu <luangruo <at> yahoo.com>:
New bug report received and forwarded. Copy sent to bug-cc-mode <at> gnu.org. (Tue, 09 Aug 2022 12:32:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Po Lu <luangruo <at> yahoo.com>
To: bug-gnu-emacs <at> gnu.org
Subject: CC Mode 5.35.1 (C/*l); Leaky fontification of xterm.c with
 font-lock-maximum-decoration set to 2
Date: Tue, 09 Aug 2022 20:31:32 +0800
Package: cc-mode

Open xterm.c with font-lock-maximum-decoration set to 2, and hold down
C-v until the entire buffer is fontified.  Then, go to line 2948:
observe that the following lines in the vicinity are not fontified at
all:

  Atom type;        <-----------------------------------
  Window *toplevels;<-----------------------------------
  int format, rc;
  unsigned long nitems, bytes_after;
  unsigned long i, real_nitems;
  unsigned char *data = NULL;
  int frame_extents[4];

#ifndef USE_XCB
  int dest_x, dest_y;
  unsigned long *wmstate;
  unsigned long wmstate_items, extent_items;
  unsigned char *wmstate_data = NULL, *extent_data = NULL;
  XWindowAttributes attrs;<-----------------------------
  Window child;           <-----------------------------
  xm_drag_receiver_info xm_info; <----------------------

Many other other lines in the buffer will also be missing fontification.


Emacs  : GNU Emacs 29.0.50 (build 62, x86_64-pc-linux-gnu)
 of 2022-08-09
Package: CC Mode 5.35.1 (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 "[ 	]*\\(//+\\|\\**\\)[ 	]*\\([ 	]*\\([-–!|#%;>*·•‣⁃◦]+[ 	]*\\)*\\)"
 )




Information forwarded to bug-cc-mode <at> gnu.org:
bug#57075; Package cc-mode. (Wed, 10 Aug 2022 18:52:02 GMT) Full text and rfc822 format available.

Message #8 received at 57075 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Po Lu <luangruo <at> yahoo.com>
Cc: acm <at> muc.de, 57075 <at> debbugs.gnu.org
Subject: Re: bug#57075: CC Mode 5.35.1 (C/*l); Leaky fontification of xterm.c
 with font-lock-maximum-decoration set to 2
Date: Wed, 10 Aug 2022 18:51:30 +0000
Hello, Po.

On Tue, Aug 09, 2022 at 20:31:32 +0800, Po Lu via CC-Mode-help wrote:
> Package: cc-mode

> Open xterm.c with font-lock-maximum-decoration set to 2, and hold down
> C-v until the entire buffer is fontified.  Then, go to line 2948:
> observe that the following lines in the vicinity are not fontified at
> all:

>   Atom type;        <-----------------------------------
>   Window *toplevels;<-----------------------------------
>   int format, rc;
>   unsigned long nitems, bytes_after;
>   unsigned long i, real_nitems;
>   unsigned char *data = NULL;
>   int frame_extents[4];

> #ifndef USE_XCB
>   int dest_x, dest_y;
>   unsigned long *wmstate;
>   unsigned long wmstate_items, extent_items;
>   unsigned char *wmstate_data = NULL, *extent_data = NULL;
>   XWindowAttributes attrs;<-----------------------------
>   Window child;           <-----------------------------
>   xm_drag_receiver_info xm_info; <----------------------

> Many other other lines in the buffer will also be missing fontification.

Yes.  It's the way level 2 does fontification of types.  Any declaration
which starts with a standard type, like int, char, void, ..... gets
fontified, additionally anything like struct foo *bar, and any type
matching one of the following: 

    ("\\sw+_t" "bool" "complex" "imaginary" "FILE" "lconv" "tm" "va_list"
     "jmp_buf" "Lisp_Object")

..  So the types ending in _t, like xcb_translate_coordinates_cookie_t
are getting fontified too, but not things like Atom or Window *.

The merly partial fontification is the price for the extra speed one
gets from level 2.  To fontify all declarations, we'd need the
algorithms from f-l-maximum-decoration 3, and the speed would pretty
much be down to that of f-l-m-d 3, too.

Sorry nothing better is possible (at the moment).

> Emacs  : GNU Emacs 29.0.50 (build 62, x86_64-pc-linux-gnu)
>  of 2022-08-09
> Package: CC Mode 5.35.1 (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)

[ CC Mode state dump appreciated, but snipped. ]

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-cc-mode <at> gnu.org:
bug#57075; Package cc-mode. (Thu, 11 Aug 2022 01:45:02 GMT) Full text and rfc822 format available.

Message #11 received at 57075 <at> debbugs.gnu.org (full text, mbox):

From: Po Lu <luangruo <at> yahoo.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 57075 <at> debbugs.gnu.org
Subject: Re: bug#57075: CC Mode 5.35.1 (C/*l); Leaky fontification of
 xterm.c with font-lock-maximum-decoration set to 2
Date: Thu, 11 Aug 2022 09:44:05 +0800
Alan Mackenzie <acm <at> muc.de> writes:

> Yes.  It's the way level 2 does fontification of types.  Any declaration
> which starts with a standard type, like int, char, void, ..... gets
> fontified, additionally anything like struct foo *bar, and any type
> matching one of the following: 
>
>     ("\\sw+_t" "bool" "complex" "imaginary" "FILE" "lconv" "tm" "va_list"
>      "jmp_buf" "Lisp_Object")
>
> ..  So the types ending in _t, like xcb_translate_coordinates_cookie_t
> are getting fontified too, but not things like Atom or Window *.
>
> The merly partial fontification is the price for the extra speed one
> gets from level 2.  To fontify all declarations, we'd need the
> algorithms from f-l-maximum-decoration 3, and the speed would pretty
> much be down to that of f-l-m-d 3, too.
>
> Sorry nothing better is possible (at the moment).

Okay, thanks for explaining.




This bug report was last modified 2 years and 141 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.