unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: HaiJun Zhang <netjune@outlook.com>
Cc: 38749@debbugs.gnu.org
Subject: bug#38749: 27.0.50; objc-mode: wrong imenu item
Date: Tue, 7 Jan 2020 20:53:57 +0000	[thread overview]
Message-ID: <20200107205357.GA21795@ACM> (raw)
In-Reply-To: <PS1PR03MB360607FE5769AF736B674F34B73F0@PS1PR03MB3606.apcprd03.prod.outlook.com>

Hello, HaiJun.

On Tue, Jan 07, 2020 at 10:09:49 +0800, HaiJun Zhang wrote:
> 在 2020年1月7日 +0800 AM2:08,Alan Mackenzie <acm@muc.de>,写道:
> > I've just spent some time fixing a more serious bug in the
> > Objective-C imenu mechanism. This only occurs when I invoke imenu
> > through the keyboard (e.g. with M-x imenu), which might explain why
> > it's survived so long without detection. If I invoke imenu with a
> > mouse click, it works.

> > Anyhow, with nsfns.m, do M-x imenu <tab> C <tab> and select any
> > item.  This works. Now do M-x imenu. This throws the error "Wrong
> > type argument: stringp, nil".

> > I've fixed this now, but haven't committed the fix yet.

It turns out, that bug had been fixed in the Emacs core version of CC
Mode back in 2012.  ;-)

> Thanks.

> > Back to your bug - clearly what is happening is that the regular
> > expression search for functions is finding things in comments (such as
> > "Copyright (C)") which look like functions but aren't. This is easy
> > enough to fix, by checking for comments and strings, but comes with a
> > fairly stiff time penalty. On my 2½ year old Ryzen machine, scanning
> > the freshly visited Objc buffer currently takes 0.0196s. With the check
> > for comments/strings, it takes 0.0650s.

> > That's a factor of ~3.25 slower. On a slower machine (factor 3) with a
> > larger file (factor 3) this could mean the scanning would take 0.6s
> > rather than 0.2s. This might be slow enough to annoy somebody a little.

I tried the timings again this evening, and I no longer see this factor
of ~3 slowdown.  In fact just a few 10s of percent.

So I've committed this fix, both to standalone CC Mode and the emacs-27
branch at savannah (from where it will soon find its way to the master
branch).

> I'm not familiar with objc. What about searching the char '{' after
> the current pattern? But then I see the following snippet in nsfns.m:

This isn't needed any more

> static Lisp_Object
> interpret_services_menu (NSMenu *menu, Lisp_Object prefix, Lisp_Object old)
> /* —————————————————————————————————————
>    Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side.
>    ————————————————————————————————————— */
> {

Could I ask you to try out the new code, and if everything's OK, we can
close the bug as fixed.

Thanks!

-- 
Alan Mackenzie (Nuremberg, Germany).





  reply	other threads:[~2020-01-07 20:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <66aa470b-7c40-4eeb-ba54-1af0adf1fc50@Spark>
2019-12-26 10:31 ` bug#38749: 27.0.50; objc-mode: wrong imenu item HaiJun Zhang
2020-01-06 18:07   ` Alan Mackenzie
2020-01-07  2:09     ` HaiJun Zhang
2020-01-07 20:53       ` Alan Mackenzie [this message]
2020-01-08  4:03         ` HaiJun Zhang
2020-01-08  7:09           ` Alan Mackenzie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200107205357.GA21795@ACM \
    --to=acm@muc.de \
    --cc=38749@debbugs.gnu.org \
    --cc=netjune@outlook.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).