GNU bug report logs - #24246
25.0.95; (c++-mode) custom/extra types not getting highlighted (as a type) after a wrapper::type argument.

Previous Next

Packages: cc-mode, emacs;

Reported by: Arash <pbqbqp <at> gmail.com>

Date: Tue, 16 Aug 2016 20:55:02 UTC

Severity: minor

Found in version 25.0.95

Done: Alan Mackenzie <acm <at> muc.de>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 24246 in the body.
You can then email your comments to 24246 AT debbugs.gnu.org in the normal way.

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-gnu-emacs <at> gnu.org:
bug#24246; Package emacs. (Tue, 16 Aug 2016 20:55:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Arash <pbqbqp <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 16 Aug 2016 20:55:02 GMT) Full text and rfc822 format available.

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

From: Arash <pbqbqp <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.0.95;
 (c++-mode) custom/extra types not getting highlighted (as a type)
 after a wrapper::type argument.
Date: Wed, 17 Aug 2016 01:24:17 +0430
$ emacs -Q ab.cc

typedef int int32;

namespace wrapper {
    enum type { a, b, c };
}

// int32 doesn't get highlighted as a type.
void test(wrapper::type A, int32 B);


typedef wrapper::type wtype;

// here it works, so double colon is the problem?
void test(wtype A, int32 B);




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#24246; Package emacs,cc-mode. (Wed, 17 Aug 2016 12:31:02 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Arash <pbqbqp <at> gmail.com>
Cc: 24246 <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95; (c++-mode) custom/extra types not getting
 highlighted (as a type) after a wrapper::type argument.
Date: Wed, 17 Aug 2016 12:29:44 +0000
Hello, Arash.

On Wed, Aug 17, 2016 at 01:24:17AM +0430, Arash wrote:
> $ emacs -Q ab.cc

> typedef int int32;

> namespace wrapper {
>     enum type { a, b, c };
> }

> // int32 doesn't get highlighted as a type.
> void test(wrapper::type A, int32 B);


> typedef wrapper::type wtype;

> // here it works, so double colon is the problem?
> void test(wtype A, int32 B);

Yes, it looks like the double colon exposes the problem.  I'll look into
it soon.

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#24246; Package emacs,cc-mode. (Wed, 17 Aug 2016 18:22:01 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Arash <pbqbqp <at> gmail.com>
Cc: 24246 <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95; (c++-mode) custom/extra types not getting
 highlighted (as a type) after a wrapper::type argument.
Date: Wed, 17 Aug 2016 18:21:21 +0000
Hello again, Arash.

On Wed, Aug 17, 2016 at 01:24:17AM +0430, Arash wrote:
> $ emacs -Q ab.cc

> typedef int int32;

> namespace wrapper {
>     enum type { a, b, c };
> }

> // int32 doesn't get highlighted as a type.
> void test(wrapper::type A, int32 B);


> typedef wrapper::type wtype;

> // here it works, so double colon is the problem?
> void test(wtype A, int32 B);

Thanks indeed for this bug report, and thanks even more for cutting it
down to a nice, crisp, manageable file.

The fontification code was not handling "::" in declarations correctly.
I think I have corrected this, and I have committed it to our master
branch at savannah.

I see you're on the emacs-25 branch.  Could you please patch your Emacs
with the following patch (the file is in directory .../lisp/progmodes),
rebuild CC Mode (a single $ emacs -Q -batch -f batch-byte-compile
.../lisp/progmodes/cc-engine.el should suffice), reload CC Mode into
your Emacs (or restart Emacs), then try out the new system on your real
code.

Then please let me know whether the problem has been truly fixed, and
if not, what is still wrong.  If everything is OK, I will close the bug.

Here's the patch:



# HG changeset patch
# User Alan Mackenzie <acm <at> muc.de>
# Date 1471456447 0
#      Wed Aug 17 17:54:07 2016 +0000
# Node ID 85afa8e79cc145c4ab61d8c8f180587d85c71bec
# Parent  0e89dd90ade9cd6f5f4ca07cb57cba6f8e1335a5
Fontify constructs following "::" in C++ argument lists correctly.

This fixes bug #24246.

* cc-engine.el (c-find-decl-prefix-search): In the "pseudo match" loop, test a
found string for a match with c-opt-identifier-concat-key (e.g. with "::").

* arglist-23.{cc,face}: New test files.

diff -r 0e89dd90ade9 -r 85afa8e79cc1 cc-engine.el
--- a/cc-engine.el	Wed Aug 17 17:53:10 2016 +0000
+++ b/cc-engine.el	Wed Aug 17 17:54:07 2016 +0000
@@ -5171,6 +5171,13 @@
 			(and (< (point) cfd-limit)
 			     (c-got-face-at (point) c-literal-faces))))
 	       t)		      ; Continue the loop over pseudo matches.
+	      ((and c-opt-identifier-concat-key
+		    (match-string 1)
+		    (save-excursion
+		      (goto-char (match-beginning 1))
+		      (looking-at c-opt-identifier-concat-key)))
+	       ;; Found, e.g., "::" in C++
+	       t)
 	      ((and (match-string 1)
 		    (string= (match-string 1) ":")
 		    (save-excursion


-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#24246; Package emacs,cc-mode. (Wed, 17 Aug 2016 20:04:02 GMT) Full text and rfc822 format available.

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

From: Arash <pbqbqp <at> gmail.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 24246 <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95;
 (c++-mode) custom/extra types not getting highlighted (as a type)
 after a wrapper::type argument.
Date: Thu, 18 Aug 2016 00:33:33 +0430
Thanks, fontification for function decs/defs got fixed but the problem
still exists in e.g. init step of a for loop...

for (wrapper::type a = 0, int32 b = 0; ; ) {
    ...
}




Reply sent to Alan Mackenzie <acm <at> muc.de>:
You have taken responsibility. (Thu, 18 Aug 2016 09:51:01 GMT) Full text and rfc822 format available.

Notification sent to Arash <pbqbqp <at> gmail.com>:
bug acknowledged by developer. (Thu, 18 Aug 2016 09:51:02 GMT) Full text and rfc822 format available.

Message #19 received at 24246-done <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Arash <pbqbqp <at> gmail.com>, 24246-done <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95; (c++-mode) custom/extra types not getting
 highlighted (as a type) after a wrapper::type argument.
Date: Thu, 18 Aug 2016 09:49:33 +0000
Hello, Arash.

On Thu, Aug 18, 2016 at 12:33:33AM +0430, Arash wrote:
> Thanks, fontification for function decs/defs got fixed but the problem
> still exists in e.g. init step of a for loop...

> for (wrapper::type a = 0, int32 b = 0; ; ) {
>     ...
> }

This is actually a different bug - if you delete the "::", the problem
is still there.  I've submitted bug #24258 for this problem, and I'm
working on it.

I'm closing the original bug now, since it appears to be fixed.

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#24246; Package emacs,cc-mode. (Tue, 23 Aug 2016 22:35:01 GMT) Full text and rfc822 format available.

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

From: Michael Welsh Duggan <mwd <at> md5i.com>
To: Arash <pbqbqp <at> gmail.com>
Cc: Alan Mackenzie <acm <at> muc.de>, 24246 <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95;
 (c++-mode) custom/extra types not getting highlighted (as a type)
 after a wrapper::type argument.
Date: Tue, 23 Aug 2016 18:34:40 -0400
Arash <pbqbqp <at> gmail.com> writes:

> Thanks, fontification for function decs/defs got fixed but the problem
> still exists in e.g. init step of a for loop...
>
> for (wrapper::type a = 0, int32 b = 0; ; ) {
>     ...
> }

I don't believe that is legal C++.  The for-init-statement must be a
single statement.  Since "wrapper::type a = 0, int32 b = 0;" is not a
legal statement, it is not a legal for-init-statement.

The following, however, is legal:

  for (struct{wrapper::type a; int32 b;} var = {0, 0}; ; ) {
  
  }

-- 
Michael Welsh Duggan
(md5i <at> md5i.com)




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#24246; Package emacs,cc-mode. (Thu, 08 Sep 2016 15:19:02 GMT) Full text and rfc822 format available.

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

From: Arash <pbqbqp <at> gmail.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 24246 <at> debbugs.gnu.org
Subject: Re: bug#24246: 25.0.95;
 (c++-mode) custom/extra types not getting highlighted (as a type)
 after a wrapper::type argument.
Date: Thu, 08 Sep 2016 19:48:12 +0430
Alan Mackenzie wrote:

> Hello again, Arash.
>
> On Wed, Aug 17, 2016 at 01:24:17AM +0430, Arash wrote:
>> $ emacs -Q ab.cc
>
>> typedef int int32;
>
>> namespace wrapper {
>>     enum type { a, b, c };
>> }
>
>> // int32 doesn't get highlighted as a type.
>> void test(wrapper::type A, int32 B);
>
>
>> typedef wrapper::type wtype;
>
>> // here it works, so double colon is the problem?
>> void test(wtype A, int32 B);
>
> Thanks indeed for this bug report, and thanks even more for cutting it
> down to a nice, crisp, manageable file.
>
> The fontification code was not handling "::" in declarations correctly.
> I think I have corrected this, and I have committed it to our master
> branch at savannah.
>
> I see you're on the emacs-25 branch.  Could you please patch your Emacs
> with the following patch (the file is in directory .../lisp/progmodes),
> rebuild CC Mode (a single $ emacs -Q -batch -f batch-byte-compile
> .../lisp/progmodes/cc-engine.el should suffice), reload CC Mode into
> your Emacs (or restart Emacs), then try out the new system on your real
> code.
>
> Then please let me know whether the problem has been truly fixed, and
> if not, what is still wrong.  If everything is OK, I will close the bug.

Hi Alan. This is a bit late, sry.

// Here, first double colon causes the same problem.
void test(::base::string S, int32 test)
{ }

// and here, even "string" doesn't get highlighted.
void test(::base::string &S)
{ }




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 07 Oct 2016 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 8 years and 309 days ago.

Previous Next


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