bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#38749: 27.0.50; objc-mode: wrong imenu item


From: HaiJun Zhang
Subject: bug#38749: 27.0.50; objc-mode: wrong imenu item
Date: Wed, 8 Jan 2020 12:03:32 +0800

I tried. It is fixed. Thanks.
在 2020年1月8日 +0800 AM4:54,Alan Mackenzie <address@hidden>,写道:
Hello, HaiJun.

On Tue, Jan 07, 2020 at 10:09:49 +0800, HaiJun Zhang wrote:
在 2020年1月7日 +0800 AM2:08,Alan Mackenzie <address@hidden>,写道:
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 via email to

[Prev in Thread] Current Thread [Next in Thread]