aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/vhdl-mode.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/progmodes/vhdl-mode.el')
-rw-r--r--lisp/progmodes/vhdl-mode.el43
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