1 |
;;; ada-xref.el --- for lookup and completion in Ada mode |
;;; ada-xref.el --- for lookup and completion in Ada mode |
2 |
|
|
3 |
;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 2001 |
;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 2001, 2002 |
4 |
;; Free Software Foundation, Inc. |
;; Free Software Foundation, Inc. |
5 |
|
|
6 |
;; Author: Markus Heritsch <Markus.Heritsch@studbox.uni-stuttgart.de> |
;; Author: Markus Heritsch <Markus.Heritsch@studbox.uni-stuttgart.de> |
7 |
;; Rolf Ebert <ebert@inf.enst.fr> |
;; Rolf Ebert <ebert@inf.enst.fr> |
8 |
;; Emmanuel Briot <briot@gnat.com> |
;; Emmanuel Briot <briot@gnat.com> |
9 |
;; Maintainer: Emmanuel Briot <briot@gnat.com> |
;; Maintainer: Emmanuel Briot <briot@gnat.com> |
10 |
;; Ada Core Technologies's version: $Revision$ |
;; Ada Core Technologies's version: Revision: 1.155.2.8 (GNAT 3.15) |
11 |
;; Keywords: languages ada xref |
;; Keywords: languages ada xref |
12 |
|
|
13 |
;; This file is part of GNU Emacs. |
;; This file is part of GNU Emacs. |
51 |
Otherwise create either a new buffer or a new frame." |
Otherwise create either a new buffer or a new frame." |
52 |
:type 'boolean :group 'ada) |
:type 'boolean :group 'ada) |
53 |
|
|
54 |
(defcustom ada-xref-create-ali t |
(defcustom ada-xref-create-ali nil |
55 |
"*If non-nil, run gcc whenever the cross-references are not up-to-date. |
"*If non-nil, run gcc whenever the cross-references are not up-to-date. |
56 |
If nil, the cross-reference mode will never run gcc." |
If nil, the cross-reference mode will never run gcc." |
57 |
:type 'boolean :group 'ada) |
:type 'boolean :group 'ada) |
91 |
:type 'string :group 'ada) |
:type 'string :group 'ada) |
92 |
|
|
93 |
(defcustom ada-prj-default-comp-cmd |
(defcustom ada-prj-default-comp-cmd |
94 |
"${cross_prefix}gcc -x ada -c ${comp_opt} ${full_current}" |
(concat "${cross_prefix}gnatmake -u -c ${gnatmake_opt} ${full_current} -cargs" |
95 |
|
" ${comp_opt}") |
96 |
"*Default command to be used to compile a single file. |
"*Default command to be used to compile a single file. |
97 |
Emacs will add the filename at the end of this command. This is the same |
Emacs will add the filename at the end of this command. This is the same |
98 |
syntax as in the project file." |
syntax as in the project file." |
133 |
"*If non-nil, a new Emacs frame will be swallowed in GVD when debugging. |
"*If non-nil, a new Emacs frame will be swallowed in GVD when debugging. |
134 |
If GVD is not the debugger used, nothing happens.") |
If GVD is not the debugger used, nothing happens.") |
135 |
|
|
136 |
|
(defcustom ada-xref-search-with-egrep t |
137 |
|
"*If non-nil, use egrep to find the possible declarations for an entity. |
138 |
|
This alternate method is used when the exact location was not found in the |
139 |
|
information provided by GNAT. However, it might be expensive if you have a lot |
140 |
|
of sources, since it will search in all the files in your project." |
141 |
|
:type 'boolean :group 'ada) |
142 |
|
|
143 |
|
(defvar ada-load-project-hook nil |
144 |
|
"Hook that is run when loading a project file. |
145 |
|
Each function in this hook takes one argument FILENAME, that is the name of |
146 |
|
the project file to load. |
147 |
|
This hook should be used to support new formats for the project files. |
148 |
|
|
149 |
|
If the function can load the file with the given filename, it should create a |
150 |
|
buffer that contains a conversion of the file to the standard format of the |
151 |
|
project files, and return that buffer. (the usual \"src_dir=\" or \"obj_dir=\" |
152 |
|
lines). It should return nil if it doesn't know how to convert that project |
153 |
|
file.") |
154 |
|
|
155 |
|
|
156 |
;; ------- Nothing to be modified by the user below this |
;; ------- Nothing to be modified by the user below this |
157 |
(defvar ada-last-prj-file "" |
(defvar ada-last-prj-file "" |
158 |
"Name of the last project file entered by the user.") |
"Name of the last project file entered by the user.") |
310 |
;; Ada file or not even associated with a file |
;; Ada file or not even associated with a file |
311 |
(list 'filename (expand-file-name |
(list 'filename (expand-file-name |
312 |
(cond |
(cond |
|
(file |
|
|
(ada-prj-get-prj-dir file)) |
|
313 |
(ada-prj-default-project-file |
(ada-prj-default-project-file |
314 |
ada-prj-default-project-file) |
ada-prj-default-project-file) |
315 |
|
(file |
316 |
|
(ada-prj-get-prj-dir file)) |
317 |
(t |
(t |
318 |
(message (concat "Not editing an Ada file," |
(message (concat "Not editing an Ada file," |
319 |
"and no default project " |
"and no default project " |
457 |
(append submenu |
(append submenu |
458 |
(list (cons (intern name) |
(list (cons (intern name) |
459 |
(list |
(list |
460 |
'menu-item (file-name-sans-extension |
'menu-item |
461 |
(file-name-nondirectory name)) |
(if (string= (file-name-extension name) |
462 |
|
ada-project-file-extension) |
463 |
|
(file-name-sans-extension |
464 |
|
(file-name-nondirectory name)) |
465 |
|
(file-name-nondirectory name)) |
466 |
command |
command |
467 |
:button (cons |
:button (cons |
468 |
:toggle |
:toggle |
540 |
(define-key ada-mode-map "\C-c5\C-d" 'ada-goto-declaration-other-frame) |
(define-key ada-mode-map "\C-c5\C-d" 'ada-goto-declaration-other-frame) |
541 |
(define-key ada-mode-map "\C-c\C-d" 'ada-goto-declaration) |
(define-key ada-mode-map "\C-c\C-d" 'ada-goto-declaration) |
542 |
(define-key ada-mode-map "\C-c\C-s" 'ada-xref-goto-previous-reference) |
(define-key ada-mode-map "\C-c\C-s" 'ada-xref-goto-previous-reference) |
|
(define-key ada-mode-map "\C-c\C-x" 'ada-reread-prj-file) |
|
543 |
(define-key ada-mode-map "\C-c\C-c" 'ada-compile-application) |
(define-key ada-mode-map "\C-c\C-c" 'ada-compile-application) |
544 |
(define-key ada-mode-map "\C-cc" 'ada-change-prj) |
(define-key ada-mode-map "\C-cc" 'ada-change-prj) |
545 |
(define-key ada-mode-map "\C-cd" 'ada-set-default-project-file) |
(define-key ada-mode-map "\C-cd" 'ada-set-default-project-file) |
547 |
(define-key ada-mode-map "\C-cr" 'ada-run-application) |
(define-key ada-mode-map "\C-cr" 'ada-run-application) |
548 |
(define-key ada-mode-map "\C-c\C-o" 'ada-goto-parent) |
(define-key ada-mode-map "\C-c\C-o" 'ada-goto-parent) |
549 |
(define-key ada-mode-map "\C-c\C-r" 'ada-find-references) |
(define-key ada-mode-map "\C-c\C-r" 'ada-find-references) |
550 |
|
(define-key ada-mode-map "\C-cl" 'ada-find-local-references) |
551 |
(define-key ada-mode-map "\C-c\C-v" 'ada-check-current) |
(define-key ada-mode-map "\C-c\C-v" 'ada-check-current) |
552 |
(define-key ada-mode-map "\C-c\C-f" 'ada-find-file) |
(define-key ada-mode-map "\C-cf" 'ada-find-file) |
553 |
) |
) |
554 |
|
|
555 |
;; ----- Menus -------------------------------------------------------------- |
;; ----- Menus -------------------------------------------------------------- |
589 |
goto-menu ["List References" ada-find-references t] |
goto-menu ["List References" ada-find-references t] |
590 |
"Next compilation error") |
"Next compilation error") |
591 |
(funcall (symbol-function 'add-menu-button) |
(funcall (symbol-function 'add-menu-button) |
592 |
|
goto-menu ["List Local References" ada-find-local-references t] |
593 |
|
"Next compilation error") |
594 |
|
(funcall (symbol-function 'add-menu-button) |
595 |
goto-menu ["Goto Declaration Other Frame" |
goto-menu ["Goto Declaration Other Frame" |
596 |
ada-goto-declaration-other-frame t] |
ada-goto-declaration-other-frame t] |
597 |
"Next compilation error") |
"Next compilation error") |
648 |
) |
) |
649 |
|
|
650 |
;; for Emacs |
;; for Emacs |
651 |
(let* ((menu (lookup-key ada-mode-map [menu-bar ada])) |
(let* ((menu (or (lookup-key ada-mode-map [menu-bar Ada]) |
652 |
(edit-menu (lookup-key ada-mode-map [menu-bar ada edit])) |
;; Emacs-21.4's easymenu.el downcases the events. |
653 |
(help-menu (lookup-key ada-mode-map [menu-bar ada help])) |
(lookup-key ada-mode-map [menu-bar ada]))) |
654 |
(goto-menu (lookup-key ada-mode-map [menu-bar ada goto])) |
(edit-menu (or (lookup-key menu [Edit]) (lookup-key menu [edit]))) |
655 |
(options-menu (lookup-key ada-mode-map [menu-bar ada options]))) |
(help-menu (or (lookup-key menu [Help]) (lookup-key menu [help]))) |
656 |
|
(goto-menu (or (lookup-key menu [Goto]) (lookup-key menu [goto]))) |
657 |
|
(options-menu (or (lookup-key menu [Options]) |
658 |
|
(lookup-key menu [options])))) |
659 |
|
|
660 |
(define-key-after menu [Check] '("Check file" . ada-check-current) |
(define-key-after menu [Check] '("Check file" . ada-check-current) |
661 |
'Customize) |
'Customize) |
687 |
'("Goto References to any entity" . ada-find-any-references)) |
'("Goto References to any entity" . ada-find-any-references)) |
688 |
(define-key goto-menu [References] |
(define-key goto-menu [References] |
689 |
'("List References" . ada-find-references)) |
'("List References" . ada-find-references)) |
690 |
|
(define-key goto-menu [Local-References] |
691 |
|
'("List Local References" . ada-find-local-references)) |
692 |
(define-key goto-menu [Prev] |
(define-key goto-menu [Prev] |
693 |
'("Goto Previous Reference" . ada-xref-goto-previous-reference)) |
'("Goto Previous Reference" . ada-xref-goto-previous-reference)) |
694 |
(define-key goto-menu [Decl-other] |
(define-key goto-menu [Decl-other] |
765 |
(defun ada-set-default-project-file (name) |
(defun ada-set-default-project-file (name) |
766 |
"Set the file whose name is NAME as the default project file." |
"Set the file whose name is NAME as the default project file." |
767 |
(interactive "fProject file:") |
(interactive "fProject file:") |
768 |
(set 'ada-prj-default-project-file name) |
(setq ada-prj-default-project-file name) |
769 |
(ada-reread-prj-file name) |
(ada-reread-prj-file name) |
770 |
) |
) |
771 |
|
|
876 |
;; find-file anyway, since the speedbar frame is special and does not |
;; find-file anyway, since the speedbar frame is special and does not |
877 |
;; allow the selection of a file in it. |
;; allow the selection of a file in it. |
878 |
|
|
879 |
(set-buffer (find-file-noselect prj-file)) |
(let* ((buffer (run-hook-with-args-until-success |
880 |
|
'ada-load-project-hook prj-file))) |
881 |
|
(unless buffer |
882 |
|
(setq buffer (find-file-noselect prj-file nil))) |
883 |
|
(set-buffer buffer)) |
884 |
|
|
885 |
(widen) |
(widen) |
886 |
(goto-char (point-min)) |
(goto-char (point-min)) |
887 |
|
|
967 |
(append (mapcar 'directory-file-name compilation-search-path) |
(append (mapcar 'directory-file-name compilation-search-path) |
968 |
ada-search-directories)) |
ada-search-directories)) |
969 |
|
|
970 |
;; Kill the .ali buffer |
;; Kill the project buffer |
971 |
(kill-buffer nil) |
(kill-buffer nil) |
972 |
(set-buffer ada-buffer) |
(set-buffer ada-buffer) |
973 |
|
|
983 |
)) |
)) |
984 |
|
|
985 |
|
|
986 |
(defun ada-find-references (&optional pos) |
(defun ada-find-references (&optional pos arg local-only) |
987 |
"Find all references to the entity under POS. |
"Find all references to the entity under POS. |
988 |
Calls gnatfind to find the references." |
Calls gnatfind to find the references. |
989 |
(interactive "") |
if ARG is t, the contents of the old *gnatfind* buffer is preserved. |
990 |
(unless pos |
if LOCAL-ONLY is t, only the declarations in the current file are returned." |
991 |
(set 'pos (point))) |
(interactive "d |
992 |
|
P") |
993 |
(ada-require-project-file) |
(ada-require-project-file) |
994 |
|
|
995 |
(let* ((identlist (ada-read-identifier pos)) |
(let* ((identlist (ada-read-identifier pos)) |
1003 |
(file-newer-than-file-p (ada-file-of identlist) alifile)) |
(file-newer-than-file-p (ada-file-of identlist) alifile)) |
1004 |
(ada-find-any-references (ada-name-of identlist) |
(ada-find-any-references (ada-name-of identlist) |
1005 |
(ada-file-of identlist) |
(ada-file-of identlist) |
1006 |
nil nil) |
nil nil local-only arg) |
1007 |
(ada-find-any-references (ada-name-of identlist) |
(ada-find-any-references (ada-name-of identlist) |
1008 |
(ada-file-of identlist) |
(ada-file-of identlist) |
1009 |
(ada-line-of identlist) |
(ada-line-of identlist) |
1010 |
(ada-column-of identlist)))) |
(ada-column-of identlist) local-only arg))) |
1011 |
) |
) |
1012 |
|
|
1013 |
(defun ada-find-any-references (entity &optional file line column) |
(defun ada-find-local-references (&optional pos arg) |
1014 |
|
"Find all references to the entity under POS. |
1015 |
|
Calls gnatfind to find the references. |
1016 |
|
if ARG is t, the contents of the old *gnatfind* buffer is preserved." |
1017 |
|
(interactive "d |
1018 |
|
P") |
1019 |
|
(ada-find-references pos arg t)) |
1020 |
|
|
1021 |
|
(defun ada-find-any-references |
1022 |
|
(entity &optional file line column local-only append) |
1023 |
"Search for references to any entity whose name is ENTITY. |
"Search for references to any entity whose name is ENTITY. |
1024 |
ENTITY was first found the location given by FILE, LINE and COLUMN." |
ENTITY was first found the location given by FILE, LINE and COLUMN. |
1025 |
|
If LOCAL-ONLY is t, then only the references in file will be listed, which |
1026 |
|
is much faster. |
1027 |
|
If APPEND is t, then the output of the command will be append to the existing |
1028 |
|
buffer *gnatfind* if it exists." |
1029 |
(interactive "sEntity name: ") |
(interactive "sEntity name: ") |
1030 |
(ada-require-project-file) |
(ada-require-project-file) |
1031 |
|
|
1043 |
quote-entity |
quote-entity |
1044 |
(if file (concat ":" (file-name-nondirectory file))) |
(if file (concat ":" (file-name-nondirectory file))) |
1045 |
(if line (concat ":" line)) |
(if line (concat ":" line)) |
1046 |
(if column (concat ":" column))))) |
(if column (concat ":" column)) |
1047 |
|
(if local-only (concat " " (file-name-nondirectory file))) |
1048 |
|
)) |
1049 |
|
old-contents) |
1050 |
|
|
1051 |
;; If a project file is defined, use it |
;; If a project file is defined, use it |
1052 |
(if (and ada-prj-default-project-file |
(if (and ada-prj-default-project-file |
1053 |
(not (string= ada-prj-default-project-file ""))) |
(not (string= ada-prj-default-project-file ""))) |
1054 |
(setq command (concat command " -p" ada-prj-default-project-file))) |
(setq command (concat command " -p" ada-prj-default-project-file))) |
1055 |
|
|
1056 |
|
(if (and append (get-buffer "*gnatfind*")) |
1057 |
|
(save-excursion |
1058 |
|
(set-buffer "*gnatfind*") |
1059 |
|
(setq old-contents (buffer-string)))) |
1060 |
|
|
1061 |
(compile-internal command "No more references" "gnatfind") |
(compile-internal command "No more references" "gnatfind") |
1062 |
|
|
1063 |
;; Hide the "Compilation" menu |
;; Hide the "Compilation" menu |
1064 |
(save-excursion |
(save-excursion |
1065 |
(set-buffer "*gnatfind*") |
(set-buffer "*gnatfind*") |
1066 |
(local-unset-key [menu-bar compilation-menu])) |
(local-unset-key [menu-bar compilation-menu]) |
1067 |
|
|
1068 |
|
(if old-contents |
1069 |
|
(progn |
1070 |
|
(goto-char 1) |
1071 |
|
(insert old-contents) |
1072 |
|
(goto-char (point-max))))) |
1073 |
) |
) |
1074 |
) |
) |
1075 |
|
|
1167 |
(let ((identlist (ada-read-identifier pos))) |
(let ((identlist (ada-read-identifier pos))) |
1168 |
(condition-case nil |
(condition-case nil |
1169 |
(ada-find-in-ali identlist other-frame) |
(ada-find-in-ali identlist other-frame) |
1170 |
(error (ada-find-in-src-path identlist other-frame))))) |
(error |
1171 |
|
(let ((ali-file (ada-get-ali-file-name (ada-file-of identlist)))) |
1172 |
|
|
1173 |
|
;; If the ALI file was up-to-date, then we probably have a predefined |
1174 |
|
;; entity, whose references are not given by GNAT |
1175 |
|
(if (and (file-exists-p ali-file) |
1176 |
|
(file-newer-than-file-p ali-file (ada-file-of identlist))) |
1177 |
|
(message "No cross-reference found. It might be a predefined entity.") |
1178 |
|
|
1179 |
|
;; Else, look in every ALI file, except if the user doesn't want that |
1180 |
|
(if ada-xref-search-with-egrep |
1181 |
|
(ada-find-in-src-path identlist other-frame) |
1182 |
|
(message "Cross-referencing information is not up-to-date. Please recompile.") |
1183 |
|
))))))) |
1184 |
|
|
1185 |
(defun ada-goto-declaration-other-frame (pos &optional other-frame) |
(defun ada-goto-declaration-other-frame (pos &optional other-frame) |
1186 |
"Display the declaration of the identifier around POS. |
"Display the declaration of the identifier around POS. |
1725 |
(set 'identlist (ada-make-identlist)) |
(set 'identlist (ada-make-identlist)) |
1726 |
(ada-set-name identlist (downcase identifier)) |
(ada-set-name identlist (downcase identifier)) |
1727 |
(ada-set-line identlist |
(ada-set-line identlist |
1728 |
(number-to-string (count-lines (point-min) (point)))) |
(number-to-string (count-lines 1 (point)))) |
1729 |
(ada-set-column identlist |
(ada-set-column identlist |
1730 |
(number-to-string (1+ (current-column)))) |
(number-to-string (1+ (current-column)))) |
1731 |
(ada-set-file identlist (buffer-file-name)) |
(ada-set-file identlist (buffer-file-name)) |
1755 |
(concat "^" (ada-line-of identlist) |
(concat "^" (ada-line-of identlist) |
1756 |
"." (ada-column-of identlist) |
"." (ada-column-of identlist) |
1757 |
"[ *]" (ada-name-of identlist) |
"[ *]" (ada-name-of identlist) |
1758 |
" \\(.*\\)$") bound t)) |
"[{\(<= ]?\\(.*\\)$") bound t)) |
1759 |
(if declaration-found |
(if declaration-found |
1760 |
(ada-set-on-declaration identlist t)) |
(ada-set-on-declaration identlist t)) |
1761 |
)) |
)) |
1774 |
(number-to-string (ada-find-file-number-in-ali |
(number-to-string (ada-find-file-number-in-ali |
1775 |
(ada-file-of identlist)))) |
(ada-file-of identlist)))) |
1776 |
(unless (re-search-forward (concat (ada-ali-index-of identlist) |
(unless (re-search-forward (concat (ada-ali-index-of identlist) |
1777 |
"|\\([0-9]+.[0-9]+ \\)*" |
"|\\([0-9]+[^0-9][0-9]+\\(\n\\.\\)? \\)*" |
1778 |
(ada-line-of identlist) |
(ada-line-of identlist) |
1779 |
"[^0-9]" |
"[^etp]" |
1780 |
(ada-column-of identlist)) |
(ada-column-of identlist) "\\>") |
1781 |
nil t) |
nil t) |
1782 |
|
|
1783 |
;; if we did not find it, it may be because the first reference |
;; if we did not find it, it may be because the first reference |
1785 |
;; Or maybe we are already on the declaration... |
;; Or maybe we are already on the declaration... |
1786 |
(unless (re-search-forward |
(unless (re-search-forward |
1787 |
(concat |
(concat |
1788 |
"^\\(\\([a-zA-Z0-9_.]+\\|\"[<>=+*-/a-z]\"\\)[ *]\\)*" |
"^[0-9]+.[0-9]+[ *]" |
1789 |
|
(ada-name-of identlist) |
1790 |
|
"[ <{=\(]\\(.\\|\n\\.\\)*\\<" |
1791 |
(ada-line-of identlist) |
(ada-line-of identlist) |
1792 |
"[^0-9]" |
"[^0-9]" |
1793 |
(ada-column-of identlist)) |
(ada-column-of identlist) "\\>") |
1794 |
nil t) |
nil t) |
1795 |
|
|
1796 |
;; If still not found, then either the declaration is unknown |
;; If still not found, then either the declaration is unknown |
1809 |
(while (looking-at "^\\.") |
(while (looking-at "^\\.") |
1810 |
(previous-line 1)) |
(previous-line 1)) |
1811 |
(unless (looking-at (concat "[0-9]+.[0-9]+[ *]" |
(unless (looking-at (concat "[0-9]+.[0-9]+[ *]" |
1812 |
(ada-name-of identlist) "[ <]")) |
(ada-name-of identlist) "[ <{=\(]")) |
1813 |
(set 'declaration-found nil)))) |
(set 'declaration-found nil)))) |
1814 |
|
|
1815 |
;; Still no success ! The ali file must be too old, and we need to |
;; Still no success ! The ali file must be too old, and we need to |
1882 |
(goto-char (point-max)) |
(goto-char (point-max)) |
1883 |
(while (re-search-backward my-regexp nil t) |
(while (re-search-backward my-regexp nil t) |
1884 |
(save-excursion |
(save-excursion |
1885 |
(set 'line-ali (count-lines (point-min) (point))) |
(setq line-ali (count-lines 1 (point))) |
1886 |
(beginning-of-line) |
(beginning-of-line) |
1887 |
;; have a look at the line and column numbers |
;; have a look at the line and column numbers |
1888 |
(if (looking-at "^\\([0-9]+\\).\\([0-9]+\\)[ *]") |
(if (looking-at "^\\([0-9]+\\).\\([0-9]+\\)[ *]") |
2371 |
;; This should really be an `add-hook'. -stef |
;; This should really be an `add-hook'. -stef |
2372 |
(setq ff-file-created-hooks 'ada-make-body-gnatstub) |
(setq ff-file-created-hooks 'ada-make-body-gnatstub) |
2373 |
|
|
|
;; Read the project file and update the search path |
|
|
;; before looking for the other file |
|
|
(make-local-hook 'ff-pre-find-hooks) |
|
|
(add-hook 'ff-pre-find-hooks 'ada-require-project-file nil t) |
|
|
|
|
2374 |
;; Completion for file names in the mini buffer should ignore .ali files |
;; Completion for file names in the mini buffer should ignore .ali files |
2375 |
(add-to-list 'completion-ignored-extensions ".ali") |
(add-to-list 'completion-ignored-extensions ".ali") |
2376 |
) |
) |
2409 |
;; Make sure that the files are always associated with a project file. Since |
;; Make sure that the files are always associated with a project file. Since |
2410 |
;; the project file has some fields that are used for the editor (like the |
;; the project file has some fields that are used for the editor (like the |
2411 |
;; casing exceptions), it has to be read before the user edits a file). |
;; casing exceptions), it has to be read before the user edits a file). |
2412 |
(add-hook 'ada-mode-hook |
;; (add-hook 'ada-mode-hook |
2413 |
(lambda() |
;; (lambda() |
2414 |
(let ((file (ada-prj-find-prj-file t))) |
;; (let ((file (ada-prj-find-prj-file t))) |
2415 |
(if file (ada-reread-prj-file file))))) |
;; (if file (ada-reread-prj-file file))))) |
2416 |
|
|
2417 |
(provide 'ada-xref) |
(provide 'ada-xref) |
2418 |
|
|