Mercurial > emacs
changeset 105692:15b4b661ceb1
* cedet/semantic/bovine/c.el (semantic-c-debug-mode-init)
(semantic-c-debug-mode-init-pch): New functions.
(semantic-c-debug-mode-init-last-mode): New var.
(semantic-c-parse-lexical-token): Use them.
* cedet/semantic/lex-spp.el (semantic-lex-spp-anlyzer-do-replace):
When extracting the argument list, limit only by point-max.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Wed, 21 Oct 2009 14:04:00 +0000 |
parents | ed970ee2fe76 |
children | 964ff7cbc8a6 |
files | lisp/ChangeLog lisp/cedet/semantic/bovine/c.el lisp/cedet/semantic/lex-spp.el |
diffstat | 3 files changed, 72 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Wed Oct 21 11:27:59 2009 +0000 +++ b/lisp/ChangeLog Wed Oct 21 14:04:00 2009 +0000 @@ -1,3 +1,13 @@ +2009-10-21 Eric Ludlam <zappo@gnu.org> + + * cedet/semantic/bovine/c.el (semantic-c-debug-mode-init) + (semantic-c-debug-mode-init-pch): New functions. + (semantic-c-debug-mode-init-last-mode): New var. + (semantic-c-parse-lexical-token): Use them. + + * cedet/semantic/lex-spp.el (semantic-lex-spp-anlyzer-do-replace): + When extracting the argument list, limit only by point-max. + 2009-10-21 Michael Albinus <michael.albinus@gmx.de> * net/tramp-smb.el (tramp-smb-get-stat-capability): New defun.
--- a/lisp/cedet/semantic/bovine/c.el Wed Oct 21 11:27:59 2009 +0000 +++ b/lisp/cedet/semantic/bovine/c.el Wed Oct 21 14:04:00 2009 +0000 @@ -712,19 +712,26 @@ ;; Protect against user hooks throwing errors. (condition-case nil (funcall mode) - (error nil)) + (error + (if (y-or-n-p + (format "There was an error initializing %s in buffer \"%s\". Debug your hooks? " + mode (buffer-name))) + (semantic-c-debug-mode-init mode) + (message "Macro parsing state may be broken...") + (sit-for 1)))) + ) ; save match data - ;; Hack in mode-local - (activate-mode-local-bindings) - ;; CHEATER! The following 3 lines are from - ;; `semantic-new-buffer-fcn', but we don't want to turn - ;; on all the other annoying modes for this little task. - (setq semantic-new-buffer-fcn-was-run t) - (semantic-lex-init) - (semantic-clear-toplevel-cache) - (remove-hook 'semantic-lex-reset-hooks 'semantic-lex-spp-reset-hook - t) - )) + ;; Hack in mode-local + (activate-mode-local-bindings) + ;; CHEATER! The following 3 lines are from + ;; `semantic-new-buffer-fcn', but we don't want to turn + ;; on all the other annoying modes for this little task. + (setq semantic-new-buffer-fcn-was-run t) + (semantic-lex-init) + (semantic-clear-toplevel-cache) + (remove-hook 'semantic-lex-reset-hooks 'semantic-lex-spp-reset-hook + t) + ) ;; Get the macro symbol table right. (setq semantic-lex-spp-dynamic-macro-symbol-obarray spp-syms) ;; (message "%S" macros) @@ -751,6 +758,41 @@ ) stream)) +(defvar semantic-c-debug-mode-init-last-mode nil + "The most recent mode needing debugging.") + +(defun semantic-c-debug-mode-init (mm) + "Debug mode init for major mode MM after we're done parsing now." + (interactive (list semantic-c-debug-mode-init-last-mode)) + (if (interactive-p) + ;; Do the debug. + (progn + (switch-to-buffer (get-buffer-create "*MODE HACK TEST*")) + (let ((debug-on-error t)) + (funcall mm))) + + ;; Notify about the debug + (setq semantic-c-debug-mode-init-last-mode mm) + + (add-hook 'post-command-hook 'semantic-c-debug-mode-init-pch))) + +(defun semantic-c-debug-mode-init-pch () + "Notify user about needing to debug their major mode hooks." + (let ((mm semantic-c-debug-mode-init-last-mode)) + (switch-to-buffer-other-window + (get-buffer-create "*MODE HACK TEST*")) + (erase-buffer) + (insert "A failure occured while parsing your buffers. + +The failure occured while attempting to initialize " (symbol-name mm) " in a +buffer not associated with a file. To debug this problem, type + +M-x semantic-c-debug-mode-init + +now. +") + (remove-hook 'post-command-hook 'semantic-c-debug-mode-init-pch))) + (defun semantic-expand-c-tag (tag) "Expand TAG into a list of equivalent tags, or nil." (let ((return-list nil)
--- a/lisp/cedet/semantic/lex-spp.el Wed Oct 21 11:27:59 2009 +0000 +++ b/lisp/cedet/semantic/lex-spp.el Wed Oct 21 14:04:00 2009 +0000 @@ -697,7 +697,14 @@ (goto-char end) (setq arg-parsed (semantic-lex-spp-one-token-and-move-for-macro - (point-at-eol))) + ;; NOTE: This used to be (point-at-eol), but + ;; that was too close for multi-line arguments + ;; to a macro. Point max may be too far if there + ;; is a typo in the buffer. + ;; + ;; Look here for performance issues while a user is typing + ;; incomplete code. + (point-max))) (setq end (semantic-lex-token-end arg-parsed)) (when (and (listp arg-parsed) (eq (car arg-parsed) 'semantic-list))