[Top][All Lists]

[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: Tue, 7 Jan 2020 10:09:49 +0800

在 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.


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'm not familiar with objc. What about searching the char '{' after the current pattern? But then I see the following snippet in nsfns.m:

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.
   ————————————————————————————————————— */

reply via email to

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