diff options
Diffstat (limited to 'lisp/cedet/semantic.el')
-rw-r--r-- | lisp/cedet/semantic.el | 87 |
1 files changed, 44 insertions, 43 deletions
diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index 7afe67b320..81a9788455 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -573,6 +573,7 @@ string." ;; The best way to call the parser from programs is via ;; `semantic-fetch-tags'. This, in turn, uses other internal ;; API functions which plug-in parsers can take advantage of. +(defvar semantic-parser-warnings) (defun semantic-fetch-tags () "Fetch semantic tags from the current buffer. @@ -602,49 +603,49 @@ was marked unparseable, then do nothing, and return the cache." (garbage-collect) (cond -;;;; Try the incremental parser to do a fast update. - ((semantic-parse-tree-needs-update-p) - (setq res (semantic-parse-changes)) - (if (semantic-parse-tree-needs-rebuild-p) - ;; If the partial reparse fails, jump to a full reparse. - (semantic-fetch-tags) - ;; Clear the cache of unmatched syntax tokens - ;; - ;; NOTE TO SELF: - ;; - ;; Move this into the incremental parser. This is a bug. - ;; - (semantic-clear-unmatched-syntax-cache) - (run-hook-with-args ;; Let hooks know the updated tags - 'semantic-after-partial-cache-change-hook res)) - (setq semantic--completion-cache nil)) - -;;;; Parse the whole system. - ((semantic-parse-tree-needs-rebuild-p) - ;; Use Emacs's built-in progress-reporter (only interactive). - (if noninteractive - (setq res (semantic-parse-region (point-min) (point-max))) - (let ((semantic--progress-reporter - (and (>= (point-max) semantic-minimum-working-buffer-size) - (eq semantic-working-type 'percent) - (make-progress-reporter - (semantic-parser-working-message (buffer-name)) - 0 100)))) - (setq res (semantic-parse-region (point-min) (point-max))) - (if semantic--progress-reporter - (progress-reporter-done semantic--progress-reporter)))) - - ;; Clear the caches when we see there were no errors. - ;; But preserve the unmatched syntax cache and warnings! - (let (semantic-unmatched-syntax-cache - semantic-unmatched-syntax-cache-check - semantic-parser-warnings) - (semantic-clear-toplevel-cache)) - ;; Set up the new overlays - (semantic--tag-link-list-to-buffer res) - ;; Set up the cache with the new results - (semantic--set-buffer-cache res) - )))) + ;; Try the incremental parser to do a fast update. + ((semantic-parse-tree-needs-update-p) + (setq res (semantic-parse-changes)) + (if (semantic-parse-tree-needs-rebuild-p) + ;; If the partial reparse fails, jump to a full reparse. + (semantic-fetch-tags) + ;; Clear the cache of unmatched syntax tokens + ;; + ;; NOTE TO SELF: + ;; + ;; Move this into the incremental parser. This is a bug. + ;; + (semantic-clear-unmatched-syntax-cache) + (run-hook-with-args ;; Let hooks know the updated tags + 'semantic-after-partial-cache-change-hook res)) + (setq semantic--completion-cache nil)) + + ;; Parse the whole system. + ((semantic-parse-tree-needs-rebuild-p) + ;; Use Emacs's built-in progress-reporter (only interactive). + (if noninteractive + (setq res (semantic-parse-region (point-min) (point-max))) + (let ((semantic--progress-reporter + (and (>= (point-max) semantic-minimum-working-buffer-size) + (eq semantic-working-type 'percent) + (make-progress-reporter + (semantic-parser-working-message (buffer-name)) + 0 100)))) + (setq res (semantic-parse-region (point-min) (point-max))) + (if semantic--progress-reporter + (progress-reporter-done semantic--progress-reporter)))) + + ;; Clear the caches when we see there were no errors. + ;; But preserve the unmatched syntax cache and warnings! + (let (semantic-unmatched-syntax-cache + semantic-unmatched-syntax-cache-check + semantic-parser-warnings) + (semantic-clear-toplevel-cache)) + ;; Set up the new overlays + (semantic--tag-link-list-to-buffer res) + ;; Set up the cache with the new results + (semantic--set-buffer-cache res) + )))) ;; Always return the current parse tree. semantic--buffer-cache) |