diff options
Diffstat (limited to 'lisp/progmodes/vhdl-mode.el')
| -rw-r--r-- | lisp/progmodes/vhdl-mode.el | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index 0e8ff525e62..6c76d7e4ad2 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el | |||
| @@ -126,6 +126,14 @@ | |||
| 126 | 126 | ||
| 127 | ;;; Code: | 127 | ;;; Code: |
| 128 | 128 | ||
| 129 | (eval-when-compile (require 'cl)) | ||
| 130 | (eval-and-compile | ||
| 131 | ;; Before Emacs-24.4, `pushnew' expands to runtime calls to `cl-adjoin' | ||
| 132 | ;; even for relatively simple cases such as used here. We only test <25 | ||
| 133 | ;; because it's easier and sufficient. | ||
| 134 | (when (or (featurep 'xemacs) (< emacs-major-version 25)) | ||
| 135 | (require 'cl))) | ||
| 136 | |||
| 129 | ;; Emacs 21+ handling | 137 | ;; Emacs 21+ handling |
| 130 | (defconst vhdl-emacs-21 (and (<= 21 emacs-major-version) (not (featurep 'xemacs))) | 138 | (defconst vhdl-emacs-21 (and (<= 21 emacs-major-version) (not (featurep 'xemacs))) |
| 131 | "Non-nil if GNU Emacs 21, 22, ... is used.") | 139 | "Non-nil if GNU Emacs 21, 22, ... is used.") |
| @@ -14314,7 +14322,7 @@ of PROJECT." | |||
| 14314 | (vhdl-scan-directory-contents dir-name project nil | 14322 | (vhdl-scan-directory-contents dir-name project nil |
| 14315 | (format "(%s/%s) " act-dir num-dir) | 14323 | (format "(%s/%s) " act-dir num-dir) |
| 14316 | (cdr dir-list)) | 14324 | (cdr dir-list)) |
| 14317 | (add-to-list 'dir-list-tmp (file-name-directory dir-name)) | 14325 | (pushnew (file-name-directory dir-name) dir-list-tmp :test #'equal) |
| 14318 | (setq dir-list (cdr dir-list) | 14326 | (setq dir-list (cdr dir-list) |
| 14319 | act-dir (1+ act-dir))) | 14327 | act-dir (1+ act-dir))) |
| 14320 | (vhdl-aput 'vhdl-directory-alist project (list (nreverse dir-list-tmp))) | 14328 | (vhdl-aput 'vhdl-directory-alist project (list (nreverse dir-list-tmp))) |
| @@ -16406,8 +16414,8 @@ component instantiation." | |||
| 16406 | (if (or (member constant-name single-list) | 16414 | (if (or (member constant-name single-list) |
| 16407 | (member constant-name multi-list)) | 16415 | (member constant-name multi-list)) |
| 16408 | (progn (setq single-list (delete constant-name single-list)) | 16416 | (progn (setq single-list (delete constant-name single-list)) |
| 16409 | (add-to-list 'multi-list constant-name)) | 16417 | (pushnew constant-name multi-list :test #'equal)) |
| 16410 | (add-to-list 'single-list constant-name)) | 16418 | (pushnew constant-name single-list :test #'equal)) |
| 16411 | (unless (match-string 1) | 16419 | (unless (match-string 1) |
| 16412 | (setq generic-alist (cdr generic-alist))) | 16420 | (setq generic-alist (cdr generic-alist))) |
| 16413 | (vhdl-forward-syntactic-ws)) | 16421 | (vhdl-forward-syntactic-ws)) |
| @@ -16433,12 +16441,12 @@ component instantiation." | |||
| 16433 | (member signal-name multi-out-list)) | 16441 | (member signal-name multi-out-list)) |
| 16434 | (setq single-out-list (delete signal-name single-out-list)) | 16442 | (setq single-out-list (delete signal-name single-out-list)) |
| 16435 | (setq multi-out-list (delete signal-name multi-out-list)) | 16443 | (setq multi-out-list (delete signal-name multi-out-list)) |
| 16436 | (add-to-list 'local-list signal-name)) | 16444 | (pushnew signal-name local-list :test #'equal)) |
| 16437 | ((member signal-name single-in-list) | 16445 | ((member signal-name single-in-list) |
| 16438 | (setq single-in-list (delete signal-name single-in-list)) | 16446 | (setq single-in-list (delete signal-name single-in-list)) |
| 16439 | (add-to-list 'multi-in-list signal-name)) | 16447 | (pushnew signal-name multi-in-list :test #'equal)) |
| 16440 | ((not (member signal-name multi-in-list)) | 16448 | ((not (member signal-name multi-in-list)) |
| 16441 | (add-to-list 'single-in-list signal-name))) | 16449 | (pushnew signal-name single-in-list :test #'equal))) |
| 16442 | ;; output signal | 16450 | ;; output signal |
| 16443 | (cond | 16451 | (cond |
| 16444 | ((member signal-name local-list) | 16452 | ((member signal-name local-list) |
| @@ -16447,17 +16455,18 @@ component instantiation." | |||
| 16447 | (member signal-name multi-in-list)) | 16455 | (member signal-name multi-in-list)) |
| 16448 | (setq single-in-list (delete signal-name single-in-list)) | 16456 | (setq single-in-list (delete signal-name single-in-list)) |
| 16449 | (setq multi-in-list (delete signal-name multi-in-list)) | 16457 | (setq multi-in-list (delete signal-name multi-in-list)) |
| 16450 | (add-to-list 'local-list signal-name)) | 16458 | (pushnew signal-name local-list :test #'equal)) |
| 16451 | ((member signal-name single-out-list) | 16459 | ((member signal-name single-out-list) |
| 16452 | (setq single-out-list (delete signal-name single-out-list)) | 16460 | (setq single-out-list (delete signal-name single-out-list)) |
| 16453 | (add-to-list 'multi-out-list signal-name)) | 16461 | (pushnew signal-name multi-out-list :test #'equal)) |
| 16454 | ((not (member signal-name multi-out-list)) | 16462 | ((not (member signal-name multi-out-list)) |
| 16455 | (add-to-list 'single-out-list signal-name)))) | 16463 | (pushnew signal-name single-out-list :test #'equal)))) |
| 16456 | (unless (match-string 1) | 16464 | (unless (match-string 1) |
| 16457 | (setq port-alist (cdr port-alist))) | 16465 | (setq port-alist (cdr port-alist))) |
| 16458 | (vhdl-forward-syntactic-ws)) | 16466 | (vhdl-forward-syntactic-ws)) |
| 16459 | (push (list inst-name (nreverse constant-alist) | 16467 | (push (list inst-name (nreverse constant-alist) |
| 16460 | (nreverse signal-alist)) inst-alist)) | 16468 | (nreverse signal-alist)) |
| 16469 | inst-alist)) | ||
| 16461 | ;; prepare signal insertion | 16470 | ;; prepare signal insertion |
| 16462 | (vhdl-goto-marker arch-decl-pos) | 16471 | (vhdl-goto-marker arch-decl-pos) |
| 16463 | (forward-line 1) | 16472 | (forward-line 1) |
| @@ -16534,14 +16543,14 @@ component instantiation." | |||
| 16534 | generic-end-pos | 16543 | generic-end-pos |
| 16535 | (vhdl-compose-insert-generic constant-entry))) | 16544 | (vhdl-compose-insert-generic constant-entry))) |
| 16536 | (setq generic-pos (point-marker)) | 16545 | (setq generic-pos (point-marker)) |
| 16537 | (add-to-list 'written-list constant-name)) | 16546 | (pushnew constant-name written-list :test #'equal)) |
| 16538 | (t | 16547 | (t |
| 16539 | (vhdl-goto-marker | 16548 | (vhdl-goto-marker |
| 16540 | (vhdl-max-marker generic-inst-pos generic-pos)) | 16549 | (vhdl-max-marker generic-inst-pos generic-pos)) |
| 16541 | (setq generic-end-pos | 16550 | (setq generic-end-pos |
| 16542 | (vhdl-compose-insert-generic constant-entry)) | 16551 | (vhdl-compose-insert-generic constant-entry)) |
| 16543 | (setq generic-inst-pos (point-marker)) | 16552 | (setq generic-inst-pos (point-marker)) |
| 16544 | (add-to-list 'written-list constant-name)))) | 16553 | (pushnew constant-name written-list :test #'equal)))) |
| 16545 | (setq constant-alist (cdr constant-alist))) | 16554 | (setq constant-alist (cdr constant-alist))) |
| 16546 | (when (/= constant-temp-pos generic-inst-pos) | 16555 | (when (/= constant-temp-pos generic-inst-pos) |
| 16547 | (vhdl-goto-marker (vhdl-max-marker constant-temp-pos generic-pos)) | 16556 | (vhdl-goto-marker (vhdl-max-marker constant-temp-pos generic-pos)) |
| @@ -16560,14 +16569,14 @@ component instantiation." | |||
| 16560 | (vhdl-max-marker | 16569 | (vhdl-max-marker |
| 16561 | port-end-pos (vhdl-compose-insert-port signal-entry))) | 16570 | port-end-pos (vhdl-compose-insert-port signal-entry))) |
| 16562 | (setq port-in-pos (point-marker)) | 16571 | (setq port-in-pos (point-marker)) |
| 16563 | (add-to-list 'written-list signal-name)) | 16572 | (pushnew signal-name written-list :test #'equal)) |
| 16564 | ((member signal-name multi-out-list) | 16573 | ((member signal-name multi-out-list) |
| 16565 | (vhdl-goto-marker (vhdl-max-marker port-out-pos port-in-pos)) | 16574 | (vhdl-goto-marker (vhdl-max-marker port-out-pos port-in-pos)) |
| 16566 | (setq port-end-pos | 16575 | (setq port-end-pos |
| 16567 | (vhdl-max-marker | 16576 | (vhdl-max-marker |
| 16568 | port-end-pos (vhdl-compose-insert-port signal-entry))) | 16577 | port-end-pos (vhdl-compose-insert-port signal-entry))) |
| 16569 | (setq port-out-pos (point-marker)) | 16578 | (setq port-out-pos (point-marker)) |
| 16570 | (add-to-list 'written-list signal-name)) | 16579 | (pushnew signal-name written-list :test #'equal)) |
| 16571 | ((or (member signal-name single-in-list) | 16580 | ((or (member signal-name single-in-list) |
| 16572 | (member signal-name single-out-list)) | 16581 | (member signal-name single-out-list)) |
| 16573 | (vhdl-goto-marker | 16582 | (vhdl-goto-marker |
| @@ -16576,12 +16585,12 @@ component instantiation." | |||
| 16576 | (vhdl-max-marker port-out-pos port-in-pos))) | 16585 | (vhdl-max-marker port-out-pos port-in-pos))) |
| 16577 | (setq port-end-pos (vhdl-compose-insert-port signal-entry)) | 16586 | (setq port-end-pos (vhdl-compose-insert-port signal-entry)) |
| 16578 | (setq port-inst-pos (point-marker)) | 16587 | (setq port-inst-pos (point-marker)) |
| 16579 | (add-to-list 'written-list signal-name)) | 16588 | (pushnew signal-name written-list :test #'equal)) |
| 16580 | ((equal (upcase (nth 2 signal-entry)) "OUT") | 16589 | ((equal (upcase (nth 2 signal-entry)) "OUT") |
| 16581 | (vhdl-goto-marker signal-pos) | 16590 | (vhdl-goto-marker signal-pos) |
| 16582 | (vhdl-compose-insert-signal signal-entry) | 16591 | (vhdl-compose-insert-signal signal-entry) |
| 16583 | (setq signal-pos (point-marker)) | 16592 | (setq signal-pos (point-marker)) |
| 16584 | (add-to-list 'written-list signal-name))) | 16593 | (pushnew signal-name written-list :test #'equal))) |
| 16585 | (setq signal-alist (cdr signal-alist))) | 16594 | (setq signal-alist (cdr signal-alist))) |
| 16586 | (when (/= port-temp-pos port-inst-pos) | 16595 | (when (/= port-temp-pos port-inst-pos) |
| 16587 | (vhdl-goto-marker | 16596 | (vhdl-goto-marker |
| @@ -16932,7 +16941,7 @@ no project is defined." | |||
| 16932 | "Remove duplicate elements from IN-LIST." | 16941 | "Remove duplicate elements from IN-LIST." |
| 16933 | (let (out-list) | 16942 | (let (out-list) |
| 16934 | (while in-list | 16943 | (while in-list |
| 16935 | (add-to-list 'out-list (car in-list)) | 16944 | (pushnew (car in-list) out-list :test #'equal) |
| 16936 | (setq in-list (cdr in-list))) | 16945 | (setq in-list (cdr in-list))) |
| 16937 | out-list)) | 16946 | out-list)) |
| 16938 | 16947 | ||