From unknown Mon Sep 08 07:02:57 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Resent-From: Mohammed Sadiq Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Sun, 05 Feb 2017 02:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 25623 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: 25623@debbugs.gnu.org X-Debbugs-Original-To: submit@debbugs.gnu.org Received: via spool by submit@debbugs.gnu.org id=B.14862630652653 (code B ref -1); Sun, 05 Feb 2017 02:52:02 +0000 Received: (at submit) by debbugs.gnu.org; 5 Feb 2017 02:51:05 +0000 Received: from localhost ([127.0.0.1]:56414 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1caCuu-0000gi-U9 for submit@debbugs.gnu.org; Sat, 04 Feb 2017 21:51:05 -0500 Received: from us2-ob3-6.mailhostbox.com ([208.91.199.219]:39176) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1caCus-0000gI-No for submit@debbugs.gnu.org; Sat, 04 Feb 2017 21:51:03 -0500 Received: from rose (unknown [117.249.219.117]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: sadiq@sadiqpk.org) by us2.outbound.mailhostbox.com (Postfix) with ESMTPSA id 2ADA4C8C99 for ; Sun, 5 Feb 2017 02:50:48 +0000 (GMT) From: Mohammed Sadiq Date: Sun, 05 Feb 2017 08:17:50 +0530 Message-ID: <874m095p61.fsf@sadiqpk.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=C5hJsV7+ c=1 sm=1 tr=0 a=NDQuA20HdrhcMBH6UcrFkQ==:117 a=NDQuA20HdrhcMBH6UcrFkQ==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=IkcTkHD0fZMA:10 a=2F9q2Pgpgg23imZES14A:9 a=QEXdDO2ut3YA:10 X-Spam-Score: -1.3 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.3 (-) When the point is in struct, enum or union of file scope, `c-defun-name' returns wrong result. Eg: In the following example (where `|' is where the points are (ie, 3 cursors are 3 different cases), case 1, in struct: the result is "t" ("struct test" may be a better result, the same for union) case 2, in enum: the result is "ONE" ("enum" may be better) case 3, in main: the result is "main" (which is of course, right) Also, simply return "struct", "union", etc if no tag name is present (like in "typedef struct {...") struct test { int a;| }; enum { ONE, TWO| }; int main (void) { | } Thanks Emacs : GNU Emacs 26.0.50.2 (x86_64-pc-linux-gnu, GTK+ Version 3.22.6) of 2017-01-20 Package: CC Mode 5.32.99 (C/l) Buffer Style: gnu c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) current state: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D (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-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 '(c-gnu-impose-minimum) c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . c-lineup-inexpr-block) (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-intro . +) (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-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 "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-=E2=80=93!|#%= ;>*=C2=B7=E2=80=A2=E2=80=A3=E2=81=83=E2=97=A6]+[ ]*\\)*\\)" ) From unknown Mon Sep 08 07:02:57 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Sun, 23 Apr 2017 12:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25623 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: Mohammed Sadiq Cc: 25623@debbugs.gnu.org Received: via spool by 25623-submit@debbugs.gnu.org id=B25623.149294994023105 (code B ref 25623); Sun, 23 Apr 2017 12:19:02 +0000 Received: (at 25623) by debbugs.gnu.org; 23 Apr 2017 12:19:00 +0000 Received: from localhost ([127.0.0.1]:35165 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2GTj-00060b-UG for submit@debbugs.gnu.org; Sun, 23 Apr 2017 08:19:00 -0400 Received: from ocolin.muc.de ([193.149.48.4]:64834 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1d2GTi-00060S-89 for 25623@debbugs.gnu.org; Sun, 23 Apr 2017 08:18:58 -0400 Received: (qmail 69611 invoked by uid 3782); 23 Apr 2017 12:18:56 -0000 Received: from acm.muc.de (p4FC4616A.dip0.t-ipconnect.de [79.196.97.106]) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 23 Apr 2017 14:18:55 +0200 Received: (qmail 4450 invoked by uid 1000); 23 Apr 2017 12:18:05 -0000 Date: Sun, 23 Apr 2017 12:18:05 +0000 Message-ID: <20170423121805.GA2671@acm> References: <874m095p61.fsf@sadiqpk.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <874m095p61.fsf@sadiqpk.org> User-Agent: Mutt/1.7.2 (2016-11-26) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Hello, Mohammed. On Sun, Feb 05, 2017 at 08:17:50 +0530, Mohammed Sadiq wrote: > When the point is in struct, enum or union of file scope, `c-defun-name' > returns wrong result. > Eg: In the following example (where `|' is where the points are (ie, 3 > cursors are 3 different cases), > case 1, in struct: the result is "t" ("struct test" may be a better > result, the same for union) > case 2, in enum: the result is "ONE" ("enum" may be better) > case 3, in main: the result is "main" (which is of course, right) > Also, simply return "struct", "union", etc if no tag name is present > (like in "typedef struct {...") > struct test > { > int a;| > }; > enum { > ONE, > TWO| > }; > int > main (void) > { > | > } Thanks for the bug report. This bug is simply a matter of buggy code in CC Mode. There follows a patch. Would you please apply this patch, compile cc-cmds.el, try it out, then either confirm to me that the bug is fixed, or tell me what still needs looking at. Thanks in advance! diff -r f78dfc813575 cc-cmds.el --- a/cc-cmds.el Sat Apr 22 14:18:55 2017 +0000 +++ b/cc-cmds.el Sun Apr 23 12:09:06 2017 +0000 @@ -1769,19 +1769,25 @@ (unless (eq where 'at-header) (c-backward-to-nth-BOF-{ 1 where) (c-beginning-of-decl-1)) + (when (looking-at c-typedef-key) + (goto-char (match-end 0)) + (c-forward-syntactic-ws)) ;; Pick out the defun name, according to the type of defun. (cond ;; struct, union, enum, or similar: - ((and (looking-at c-type-prefix-key) - (progn (c-forward-token-2 2) ; over "struct foo " - (or (eq (char-after) ?\{) - (looking-at c-symbol-key)))) ; "struct foo bar ..." - (save-match-data (c-forward-token-2)) - (when (eq (char-after) ?\{) - (c-backward-token-2) - (looking-at c-symbol-key)) - (match-string-no-properties 0)) + ((looking-at c-type-prefix-key) + (let ((key-pos (point))) + (c-forward-token-2 1) ; over "struct ". + (cond + ((looking-at c-symbol-key) ; "struct foo { ..." + (buffer-substring-no-properties key-pos (match-end 0))) + ((eq (char-after) ?{) ; "struct { ... } foo" + (when (c-go-list-forward) + (c-forward-syntactic-ws) + (when (looking-at c-symbol-key) ; a bit bogus - there might + ; be several identifiers. + (match-string-no-properties 0))))))) ((looking-at "DEFUN\\s-*(") ;"DEFUN\\_>") think of XEmacs! ;; DEFUN ("file-name-directory", Ffile_name_directory, Sfile_name_directory, ...) ==> Ffile_name_directory > Thanks [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From unknown Mon Sep 08 07:02:57 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Resent-From: Mohammed Sadiq Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Sun, 23 Apr 2017 18:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25623 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: Alan Mackenzie Cc: 25623@debbugs.gnu.org Reply-To: Mohammed Sadiq Received: via spool by 25623-submit@debbugs.gnu.org id=B25623.14929722117719 (code B ref 25623); Sun, 23 Apr 2017 18:31:02 +0000 Received: (at 25623) by debbugs.gnu.org; 23 Apr 2017 18:30:11 +0000 Received: from localhost ([127.0.0.1]:36738 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2MGw-00020R-PQ for submit@debbugs.gnu.org; Sun, 23 Apr 2017 14:30:10 -0400 Received: from us2-ob1-2.mailhostbox.com ([162.210.70.53]:50004) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2MGu-00020J-AE for 25623@debbugs.gnu.org; Sun, 23 Apr 2017 14:30:09 -0400 Received: from 172.16.214.59 (unknown [172.16.214.59]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: sadiq@sadiqpk.org) by us2.outbound.mailhostbox.com (Postfix) with ESMTPSA id 7919B180AD4; Sun, 23 Apr 2017 18:30:07 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sadiqpk.org; s=20160628; t=1492972207; bh=Exf4/D4nQEaCSfgbAL3ezZmrlXie6nAg+ESPRpGL8dc=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject; b=SpgS22LMluyr4HC2r+1wXhEgFCtRxBFm19Fwr/wzeIU8nQ7zrXadUbv+HrZZ9oVAd UmhKAJqLj+2juXLvGuo2lIFY5jyHDwRfB7sqpxemOXjYUZVPpGdGLt6KBX+mzoR1wn TaXTIjqD9m41AHowHYOhNyDl7EvBF/jLNDIf4tJc= Date: Mon, 24 Apr 2017 00:00:07 +0530 (IST) From: Mohammed Sadiq Message-ID: <537366298.12925.1492972207489@webmail.mailhostbox.com> In-Reply-To: <20170423121805.GA2671@acm> References: <874m095p61.fsf@sadiqpk.org> <20170423121805.GA2671@acm> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Priority: 3 Importance: Medium X-Mailer: Open-Xchange Mailer v7.8.1-Rev14 X-Originating-Client: open-xchange-appsuite X-CMAE-Score: 0 X-CMAE-Analysis: v=2.2 cv=QvQu5R6d c=1 sm=1 tr=0 a=3zYEqOLVmx/W3MhMQxMQ8Q==:117 a=IkcTkHD0fZMA:10 a=XhmSb5I3aXNlqdaFmh8A:9 a=QEXdDO2ut3YA:10 X-Spam-Score: -1.3 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.8 (--) Hi, > On April 23, 2017 at 5:48 PM Alan Mackenzie wrote: > Thanks for the bug report. This bug is simply a matter of buggy code in > CC Mode. There follows a patch. > > Would you please apply this patch, compile cc-cmds.el, try it out, then > either confirm to me that the bug is fixed, or tell me what still needs > looking at. Thanks in advance! > [code snipped] Hi. I have a few test cases that this fails (not quiet bad, but may be better not to break) enum { A, B,| C, }; gives 'nil', which would better return 'enum' as it is common to have enums without names associated. int a[] = {'h', 'e', 'l', 'l', 'o', '\0'|}; gives "[" which I believe, should actually return 'nil' when defined at file scope. typedef struct { int a; int b;| } nice; returns "nice". It may be better to return "struct nice" as in "struct nice {...};" definition. Thanks > Alan Mackenzie (Nuremberg, Germany). From unknown Mon Sep 08 07:02:57 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Sun, 23 Apr 2017 21:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25623 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: Mohammed Sadiq Cc: 25623@debbugs.gnu.org Received: via spool by 25623-submit@debbugs.gnu.org id=B25623.149298137121405 (code B ref 25623); Sun, 23 Apr 2017 21:03:01 +0000 Received: (at 25623) by debbugs.gnu.org; 23 Apr 2017 21:02:51 +0000 Received: from localhost ([127.0.0.1]:36831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2Oeg-0005ZB-Nm for submit@debbugs.gnu.org; Sun, 23 Apr 2017 17:02:50 -0400 Received: from ocolin.muc.de ([193.149.48.4]:40284 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1d2Oee-0005Z1-K1 for 25623@debbugs.gnu.org; Sun, 23 Apr 2017 17:02:49 -0400 Received: (qmail 7997 invoked by uid 3782); 23 Apr 2017 21:02:46 -0000 Received: from acm.muc.de (p4FC4616A.dip0.t-ipconnect.de [79.196.97.106]) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 23 Apr 2017 23:02:45 +0200 Received: (qmail 7627 invoked by uid 1000); 23 Apr 2017 21:01:56 -0000 Date: Sun, 23 Apr 2017 21:01:56 +0000 Message-ID: <20170423210156.GB2671@acm> References: <874m095p61.fsf@sadiqpk.org> <20170423121805.GA2671@acm> <537366298.12925.1492972207489@webmail.mailhostbox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <537366298.12925.1492972207489@webmail.mailhostbox.com> User-Agent: Mutt/1.7.2 (2016-11-26) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Hello, Mohammed. Thanks for the fast reply. On Mon, Apr 24, 2017 at 00:00:07 +0530, Mohammed Sadiq wrote: > Hi, > > On April 23, 2017 at 5:48 PM Alan Mackenzie wrote: > > Thanks for the bug report. This bug is simply a matter of buggy code in > > CC Mode. There follows a patch. > > Would you please apply this patch, compile cc-cmds.el, try it out, then > > either confirm to me that the bug is fixed, or tell me what still needs > > looking at. Thanks in advance! > > [code snipped] > Hi. I have a few test cases that this fails (not quiet bad, but may be better not > to break) > enum > { > A, > B,| > C, > }; > gives 'nil', which would better return 'enum' as it is common to have enums without > names associated. I've thought about this. The problem is that "enum" is not a name - it is a keyword. > int a[] = {'h', 'e', 'l', 'l', 'o', '\0'|}; > gives "[" which I believe, should actually return 'nil' when defined at file scope. It should indeed return nil. Please see the amended patch (below). > typedef struct > { > int a; > int b;| > } nice; > returns "nice". It may be better to return "struct nice" as in "struct nice {...};" definition. I considered that, too. Even returning "nice" is a bit bogus, here. For example, if we had "typedef struct { ... } nice, easy;" why should we return "nice" (which we do) rather than "easy"? I think here, strictly speaking, we should return nil, since "nice" is an identifier _after_ the main type definition, not part of it. But, then again, maybe here is not the place to be strict. ;-) I think returning "struct nice" would be totally wrong, here. That is not the name of the struct, the way it is in "struct nice { ... }". Here's the amended patch: diff -r f78dfc813575 cc-cmds.el --- a/cc-cmds.el Sat Apr 22 14:18:55 2017 +0000 +++ b/cc-cmds.el Sun Apr 23 20:38:14 2017 +0000 @@ -1769,19 +1769,25 @@ (unless (eq where 'at-header) (c-backward-to-nth-BOF-{ 1 where) (c-beginning-of-decl-1)) + (when (looking-at c-typedef-key) + (goto-char (match-end 0)) + (c-forward-syntactic-ws)) ;; Pick out the defun name, according to the type of defun. (cond ;; struct, union, enum, or similar: - ((and (looking-at c-type-prefix-key) - (progn (c-forward-token-2 2) ; over "struct foo " - (or (eq (char-after) ?\{) - (looking-at c-symbol-key)))) ; "struct foo bar ..." - (save-match-data (c-forward-token-2)) - (when (eq (char-after) ?\{) - (c-backward-token-2) - (looking-at c-symbol-key)) - (match-string-no-properties 0)) + ((looking-at c-type-prefix-key) + (let ((key-pos (point))) + (c-forward-token-2 1) ; over "struct ". + (cond + ((looking-at c-symbol-key) ; "struct foo { ..." + (buffer-substring-no-properties key-pos (match-end 0))) + ((eq (char-after) ?{) ; "struct { ... } foo" + (when (c-go-list-forward) + (c-forward-syntactic-ws) + (when (looking-at c-symbol-key) ; a bit bogus - there might + ; be several identifiers. + (match-string-no-properties 0))))))) ((looking-at "DEFUN\\s-*(") ;"DEFUN\\_>") think of XEmacs! ;; DEFUN ("file-name-directory", Ffile_name_directory, Sfile_name_directory, ...) ==> Ffile_name_directory @@ -1808,7 +1814,8 @@ (c-backward-syntactic-ws)) (setq name-end (point)) (c-backward-token-2) - (buffer-substring-no-properties (point) name-end))))))))) + (and (looking-at c-symbol-start) + (buffer-substring-no-properties (point) name-end)))))))))) (defun c-declaration-limits (near) ;; Return a cons of the beginning and end positions of the current > Thanks -- Alan Mackenzie (Nuremberg, Germany). From unknown Mon Sep 08 07:02:57 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Resent-From: Mohammed Sadiq Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Mon, 24 Apr 2017 03:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25623 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: Alan Mackenzie Cc: 25623@debbugs.gnu.org Reply-To: Mohammed Sadiq Received: via spool by 25623-submit@debbugs.gnu.org id=B25623.149300547117028 (code B ref 25623); Mon, 24 Apr 2017 03:45:02 +0000 Received: (at 25623) by debbugs.gnu.org; 24 Apr 2017 03:44:31 +0000 Received: from localhost ([127.0.0.1]:37017 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2UvP-0004Qa-9b for submit@debbugs.gnu.org; Sun, 23 Apr 2017 23:44:31 -0400 Received: from us2-ob2-1.mailhostbox.com ([162.210.70.55]:57546) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d2UvM-0004QR-Jg for 25623@debbugs.gnu.org; Sun, 23 Apr 2017 23:44:29 -0400 Received: from 172.16.214.59 (unknown [172.16.214.59]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: sadiq@sadiqpk.org) by us2.outbound.mailhostbox.com (Postfix) with ESMTPSA id A4367781065; Mon, 24 Apr 2017 03:44:27 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sadiqpk.org; s=20160628; t=1493005467; bh=FqI7UgtJ2kcBT08VtRvQdMTKRaUBTcaVpsox8ThYA7w=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject; b=dKpwBuA1wPMSUiHaKo3ASHupcJDPdW4tPH8lU7aQR62tgBbkjypBduNl0o0RIsl7A 8HUzOjtthl0r/K9anYLjFyoQru/0+QNlj1Ad8TqLPa2O/vjpv/WAh/V0MJ/e8XEYw9 1jLENhCziOvdz7Df4R2QhqwwNGqU1GkYa7rpb0JM= Date: Mon, 24 Apr 2017 09:14:27 +0530 (IST) From: Mohammed Sadiq Message-ID: <1138316548.5160.1493005467669@webmail.mailhostbox.com> In-Reply-To: <20170423210156.GB2671@acm> References: <874m095p61.fsf@sadiqpk.org> <20170423121805.GA2671@acm> <537366298.12925.1492972207489@webmail.mailhostbox.com> <20170423210156.GB2671@acm> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Priority: 3 Importance: Medium X-Mailer: Open-Xchange Mailer v7.8.1-Rev14 X-Originating-Client: open-xchange-appsuite X-CMAE-Score: 0 X-CMAE-Analysis: v=2.2 cv=fIhJ5dSe c=1 sm=1 tr=0 a=3zYEqOLVmx/W3MhMQxMQ8Q==:117 a=IkcTkHD0fZMA:10 a=LTeGMiR16aSpPQqHi2oA:9 a=QEXdDO2ut3YA:10 X-Spam-Score: -0.8 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) > On April 24, 2017 at 2:31 AM Alan Mackenzie wrote: > > > > enum > > { > > A, > > B,| > > C, > > }; > > > > gives 'nil', which would better return 'enum' as it is common to have enums without > > names associated. > > I've thought about this. The problem is that "enum" is not a name - it > is a keyword. Yeah, right, but as "enum" and "struct" can't be used function names, users can use c-defun-name to check if the point is in struct or enum too. > > > int a[] = {'h', 'e', 'l', 'l', 'o', '\0'|}; > > > > gives "[" which I believe, should actually return 'nil' when defined at file scope. > > It should indeed return nil. Please see the amended patch (below). Your patch fixed the issue. > > > typedef struct > > { > > int a; > > int b;| > > } nice; > > > > returns "nice". It may be better to return "struct nice" as in "struct nice {...};" definition. > > I considered that, too. Even returning "nice" is a bit bogus, here. For > example, if we had "typedef struct { ... } nice, easy;" why should we > return "nice" (which we do) rather than "easy"? I think here, strictly > speaking, we should return nil, since "nice" is an identifier _after_ the > main type definition, not part of it. But, then again, maybe here is not > the place to be strict. ;-) > If in both cases, returning simply "struct" would be more helpful to the users than nil, imho. the same for enum Thanks > [code snipped] > -- > Alan Mackenzie (Nuremberg, Germany). From unknown Mon Sep 08 07:02:57 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Mohammed Sadiq Subject: bug#25623: closed (Re: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions) Message-ID: References: <20170712202453.GB13295@acm> <874m095p61.fsf@sadiqpk.org> X-Gnu-PR-Message: they-closed 25623 X-Gnu-PR-Package: cc-mode Reply-To: 25623@debbugs.gnu.org Date: Wed, 12 Jul 2017 20:27:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1499891222-22087-1" This is a multi-part message in MIME format... ------------=_1499891222-22087-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for file= scope enums, structs and unions which was filed against the cc-mode package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 25623@debbugs.gnu.org. --=20 25623: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D25623 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1499891222-22087-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 25623-done) by debbugs.gnu.org; 12 Jul 2017 20:26:14 +0000 Received: from localhost ([127.0.0.1]:35843 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dVOD8-0005jB-FQ for submit@debbugs.gnu.org; Wed, 12 Jul 2017 16:26:14 -0400 Received: from ocolin.muc.de ([193.149.48.4]:12091 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1dVOD6-0005j2-MG for 25623-done@debbugs.gnu.org; Wed, 12 Jul 2017 16:26:13 -0400 Received: (qmail 14047 invoked by uid 3782); 12 Jul 2017 20:26:11 -0000 Received: from acm.muc.de (p548C6B90.dip0.t-ipconnect.de [84.140.107.144]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 12 Jul 2017 22:26:10 +0200 Received: (qmail 15841 invoked by uid 1000); 12 Jul 2017 20:24:53 -0000 Date: Wed, 12 Jul 2017 20:24:53 +0000 To: Mohammed Sadiq Subject: Re: bug#25623: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions Message-ID: <20170712202453.GB13295@acm> References: <874m095p61.fsf@sadiqpk.org> <20170423121805.GA2671@acm> <537366298.12925.1492972207489@webmail.mailhostbox.com> <20170423210156.GB2671@acm> <1138316548.5160.1493005467669@webmail.mailhostbox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1138316548.5160.1493005467669@webmail.mailhostbox.com> User-Agent: Mutt/1.7.2 (2016-11-26) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 25623-done Cc: 25623-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Hello, Mohammed. On Mon, Apr 24, 2017 at 09:14:27 +0530, Mohammed Sadiq wrote: > > On April 24, 2017 at 2:31 AM Alan Mackenzie wrote: > > > enum > > > { > > > A, > > > B,| > > > C, > > > }; > > > gives 'nil', which would better return 'enum' as it is common to have enums without > > > names associated. > > I've thought about this. The problem is that "enum" is not a name - it > > is a keyword. > Yeah, right, but as "enum" and "struct" can't be used function names, users can use > c-defun-name to check if the point is in struct or enum too. I put on my (hopefully benevolent) dictator's hat and decided to stick with my reasoning, here. > > > int a[] = {'h', 'e', 'l', 'l', 'o', '\0'|}; > > > gives "[" which I believe, should actually return 'nil' when defined at file scope. > > It should indeed return nil. Please see the amended patch (below). > Your patch fixed the issue. Thanks. I've committed the patch and closed the bug. > > > typedef struct > > > { > > > int a; > > > int b;| > > > } nice; > > > returns "nice". It may be better to return "struct nice" as in "struct nice {...};" definition. > > I considered that, too. Even returning "nice" is a bit bogus, here. For > > example, if we had "typedef struct { ... } nice, easy;" why should we > > return "nice" (which we do) rather than "easy"? I think here, strictly > > speaking, we should return nil, since "nice" is an identifier _after_ the > > main type definition, not part of it. But, then again, maybe here is not > > the place to be strict. ;-) > If in both cases, returning simply "struct" would be more helpful to the users > than nil, imho. the same for enum I'm afraid I used my dictator's hat here, too. Anyway, the bug is, at long last, closed. > Thanks -- Alan Mackenzie (Nuremberg, Germany). ------------=_1499891222-22087-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 5 Feb 2017 02:51:05 +0000 Received: from localhost ([127.0.0.1]:56414 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1caCuu-0000gi-U9 for submit@debbugs.gnu.org; Sat, 04 Feb 2017 21:51:05 -0500 Received: from us2-ob3-6.mailhostbox.com ([208.91.199.219]:39176) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1caCus-0000gI-No for submit@debbugs.gnu.org; Sat, 04 Feb 2017 21:51:03 -0500 Received: from rose (unknown [117.249.219.117]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: sadiq@sadiqpk.org) by us2.outbound.mailhostbox.com (Postfix) with ESMTPSA id 2ADA4C8C99 for ; Sun, 5 Feb 2017 02:50:48 +0000 (GMT) From: Mohammed Sadiq To: submit@debbugs.gnu.org Subject: CC Mode 5.32.99 (C/l); `c-defun-name' returns wrong result for filescope enums, structs and unions X-Debbugs-Package: cc-mode Date: Sun, 05 Feb 2017 08:17:50 +0530 Message-ID: <874m095p61.fsf@sadiqpk.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=C5hJsV7+ c=1 sm=1 tr=0 a=NDQuA20HdrhcMBH6UcrFkQ==:117 a=NDQuA20HdrhcMBH6UcrFkQ==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=IkcTkHD0fZMA:10 a=2F9q2Pgpgg23imZES14A:9 a=QEXdDO2ut3YA:10 X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.3 (-) When the point is in struct, enum or union of file scope, `c-defun-name' returns wrong result. Eg: In the following example (where `|' is where the points are (ie, 3 cursors are 3 different cases), case 1, in struct: the result is "t" ("struct test" may be a better result, the same for union) case 2, in enum: the result is "ONE" ("enum" may be better) case 3, in main: the result is "main" (which is of course, right) Also, simply return "struct", "union", etc if no tag name is present (like in "typedef struct {...") struct test { int a;| }; enum { ONE, TWO| }; int main (void) { | } Thanks Emacs : GNU Emacs 26.0.50.2 (x86_64-pc-linux-gnu, GTK+ Version 3.22.6) of 2017-01-20 Package: CC Mode 5.32.99 (C/l) Buffer Style: gnu c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) current state: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D (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-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 '(c-gnu-impose-minimum) c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . c-lineup-inexpr-block) (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-intro . +) (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-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 "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-=E2=80=93!|#%= ;>*=C2=B7=E2=80=A2=E2=80=A3=E2=81=83=E2=97=A6]+[ ]*\\)*\\)" ) ------------=_1499891222-22087-1--