From fb0d15459ca0a197330e6131526613d04a56c12a Mon Sep 17 00:00:00 2001 From: Stephen Leake Date: Thu, 14 Jan 2010 13:52:37 +0100 Subject: [PATCH] * progmodes/ada-mode.el: Deal with Ada 2005 "overriding" keyword. (ada-subprog-start-re, ada-imenu-subprogram-menu-re): Add keyword. (ada-get-current-indent, ada-imenu-generic-expression) (ada-which-function): Check for it. --- lisp/ChangeLog | 7 +++++++ lisp/progmodes/ada-mode.el | 23 +++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fae0eb39051..1be10bb17cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2010-01-14 Stephen Leake + + * progmodes/ada-mode.el: Deal with Ada 2005 "overriding" keyword. + (ada-subprog-start-re, ada-imenu-subprogram-menu-re): Add keyword. + (ada-get-current-indent, ada-imenu-generic-expression) + (ada-which-function): Check for it. + 2010-01-14 Stephen Leake * progmodes/ada-mode.el (ada-clean-buffer-before-saving): Make obsolete. diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el index e246118fae2..b25e54018fa 100644 --- a/lisp/progmodes/ada-mode.el +++ b/lisp/progmodes/ada-mode.el @@ -674,7 +674,7 @@ A new statement starts after these.") (defvar ada-subprog-start-re (eval-when-compile - (concat "\\<" (regexp-opt '("accept" "entry" "function" "package" "procedure" + (concat "\\<" (regexp-opt '("accept" "entry" "function" "overriding" "package" "procedure" "protected" "task") t) "\\>")) "Regexp for the start of a subprogram.") @@ -721,7 +721,7 @@ displaying the menu if point was on an identifier." (defconst ada-imenu-comment-re "\\([ \t]*--.*\\)?") (defconst ada-imenu-subprogram-menu-re - (concat "^[ \t]*\\(procedure\\|function\\)[ \t\n]+" + (concat "^[ \t]*\\(overriding[ \t]*\\)?\\(procedure\\|function\\)[ \t\n]+" "\\(\\(\\sw\\|_\\)+\\)[ \t\n]*\\([ \t\n]\\|([^)]+)" ada-imenu-comment-re "\\)[ \t\n]*" @@ -729,7 +729,7 @@ displaying the menu if point was on an identifier." (defvar ada-imenu-generic-expression (list - (list nil ada-imenu-subprogram-menu-re 2) + (list nil ada-imenu-subprogram-menu-re 3) (list "*Specs*" (concat "^[ \t]*\\(procedure\\|function\\)[ \t\n]+\\(\\(\\sw\\|_\\)+\\)" @@ -2477,7 +2477,7 @@ and the offset." (list (progn (back-to-indentation) (point)) 'ada-indent)) (save-excursion (ada-goto-stmt-start) - (if (looking-at "\\") + (if (looking-at "\\") (list (progn (back-to-indentation) (point)) 0) (list (progn (back-to-indentation) (point)) 'ada-indent))))) @@ -2626,20 +2626,23 @@ and the offset." (looking-at "\\<\\(package\\|function\\|procedure\\)\\>")) (save-excursion ;; Go up until we find either a generic section, or the end of the - ;; previous subprogram/package + ;; previous subprogram/package, or 'overriding' for this function/procedure (let (found) (while (and (not found) (ada-search-ignore-string-comment - "\\<\\(generic\\|end\\|begin\\|package\\|procedure\\|function\\)\\>" t)) + "\\<\\(generic\\|end\\|begin\\|overriding\\|package\\|procedure\\|function\\)\\>" t)) ;; avoid "with procedure"... in generic parts (save-excursion (forward-word -1) (setq found (not (looking-at "with")))))) - (if (looking-at "generic") - (list (progn (back-to-indentation) (point)) 0) - (ada-indent-on-previous-lines nil orgpoint orgpoint)))) + (cond + ((looking-at "\\") + (list (progn (back-to-indentation) (point)) 0)) + + (t + (ada-indent-on-previous-lines nil orgpoint orgpoint))))) ;;--------------------------------- ;; label @@ -5057,7 +5060,7 @@ Since the search can be long, the results are cached." ;; Get the function name, but not the properties, or this changes ;; the face in the modeline on Emacs 21 - (setq func-name (match-string-no-properties 2)) + (setq func-name (match-string-no-properties 3)) (if (and (not (ada-in-comment-p)) (not (save-excursion (goto-char (match-end 0)) -- 2.39.2