Переполнение стека при генерации таблицы завершения тегов в emacs

Я использую GNU Emacs 23.3 в Windows. Я работаю с очень большой базой кода, для которой я генерирую файл TAGS (используя двоичный файл etags, поставляемый с Emacs). Файл TAGS довольно большой (обычно его размер составляет около 100 МБ). Мне редко нужно использовать какие-либо функции, кроме find-tag , но бывают случаи, когда мне хотелось бы выполнить завершение из таблицы TAGS.

Вызов complete-tag заставляет Emacs автоматически создавать таблицу завершения. Этот процесс занимает довольно много времени, но моя проблема не в количестве времени, которое требуется, а скорее в том, что прямо в конец (около 100% завершения), У меня переполнение стека (извините за непечатаемые символы):

Debugger entered--Lisp error: (error "Stack overflow in regexp matcher")
  re-search-forward("^\\(\\([^]+[^-a-zA-Z0-9_+*$:]+\\)?\\([-a-zA-Z0-9_+*$?:]+\\)[^-a-zA-Z0-9_+*$?:]*\\)\\(\\([^\n]+\\)\\)?\\([0-9]+\\)?,\\([0-9]+\\)?\n" nil t)
  etags-tags-completion-table()
  byte-code(...)
  tags-completion-table()

Кто-нибудь еще сталкивался с этим? Знаете, как это обойти?

EDIT: Вывод стека после включения debug-on-error

EDIT: Удален стек, так как теперь я знаю, как выглядят записи с ошибками например:

^L
c:\path\to\some\header.h,0
^L
c:\path\to\some\otherheader.h,0

Мой файл тегов содержит довольно много записей в этом формате. Глядя на задействованные заголовки, становится ясно, что etags не могут правильно их проанализировать. Это нормально, но я удивлен, что таблица-завершения-тегов не учитывает этот формат в своем регулярном выражении. Для справки, вот как выглядит настоящая запись:

^L
c:\path\to\some\validheader.h,115
class CSomeClass ^?12,345
bool SomeMethod(^?CSomeClass::SomeMethod^A67,890
7
задан paulcam 31 March 2011 в 20:53
поделиться