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
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.
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):
$ 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):
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):
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):
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):
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):
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):
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.