Function: vhdl-get-visible-signals
vhdl-get-visible-signals is a byte-compiled function defined in
vhdl-mode.el.gz.
Signature
(vhdl-get-visible-signals)
Documentation
Get all signals visible in the current block.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-get-visible-signals ()
"Get all signals visible in the current block."
(let (beg end signal-list entity-name file-name)
(vhdl-prepare-search-2
;; get entity name
(save-excursion
(unless (and (re-search-backward "^\\(architecture\\s-+\\w+\\s-+of\\s-+\\(\\w+\\)\\|end\\)\\>" nil t)
(not (equal "END" (upcase (match-string 1))))
(setq entity-name (match-string 2)))
(error "ERROR: Not within an architecture")))
;; search for signals declared in entity port clause
(save-excursion
(goto-char (point-min))
(unless (re-search-forward (concat "^entity\\s-+" entity-name "\\>") nil t)
(setq file-name
(concat (vhdl-replace-string vhdl-entity-file-name entity-name t)
"." (file-name-extension (buffer-file-name)))))
(vhdl-visit-file
file-name t
(vhdl-prepare-search-2
(goto-char (point-min))
(if (not (re-search-forward (concat "^entity\\s-+" entity-name "\\>") nil t))
(error "ERROR: Entity \"%s\" not found:\n --> see option `vhdl-entity-file-name'" entity-name)
(when (setq beg (vhdl-re-search-forward
"\\<port[ \t\n\r\f]*("
(save-excursion
(re-search-forward "^end\\>" nil t))
t))
(setq end (save-excursion
(backward-char) (forward-sexp) (point)))
(vhdl-forward-syntactic-ws)
(while (< (point) end)
(when (looking-at "signal[ \t\n\r\f]+")
(goto-char (match-end 0)))
(while (looking-at "\\([a-zA-Z]\\w*\\)[ \t\n\r\f,]+")
(setq signal-list
(cons (downcase (match-string 1)) signal-list))
(goto-char (match-end 0))
(vhdl-forward-syntactic-ws))
(re-search-forward ";" end 1)
(vhdl-forward-syntactic-ws)))))))
;; search for signals declared in architecture declarative part
(save-excursion
(if (not (and (setq beg (re-search-backward "^\\(architecture\\s-+\\w+\\s-+of\\s-+\\(\\w+\\)\\|end\\)\\>" nil t))
(not (equal "END" (upcase (match-string 1))))
(setq end (re-search-forward "^begin\\>" nil t))))
(error "ERROR: No architecture declarative part found")
;; scan for all declared signal and alias names
(goto-char beg)
(while (re-search-forward "^\\s-*\\(\\(signal\\)\\|alias\\)\\>" end t)
(when (= 0 (nth 0 (parse-partial-sexp beg (point))))
(if (match-string 2)
;; scan signal name
(while (looking-at "[ \t\n\r\f,]+\\([a-zA-Z]\\w*\\)")
(setq signal-list
(cons (downcase (match-string 1)) signal-list))
(goto-char (match-end 0)))
;; scan alias name, check is alias of (declared) signal
(when (and (looking-at "[ \t\n\r\f]+\\([a-zA-Z]\\w*\\)[^;]*\\<is[ \t\n\r\f]+\\([a-zA-Z]\\w*\\)")
(member (downcase (match-string 2)) signal-list))
(setq signal-list
(cons (downcase (match-string 1)) signal-list))
(goto-char (match-end 0))))
(setq beg (point))))))
;; search for signals declared in surrounding block declarative parts
(save-excursion
(while (and (progn (while (and (setq beg (re-search-backward "^\\s-*\\(\\w+\\s-*:\\s-*\\(block\\|\\(for\\|if\\).*\\<generate\\>\\)\\|\\(end\\)\\s-+block\\)\\>" nil t))
(match-string 4))
(goto-char (match-end 4))
(vhdl-backward-sexp)
(re-search-backward "^\\s-*\\w+\\s-*:\\s-*\\(block\\|generate\\)\\>" nil t))
beg)
(setq end (re-search-forward "^\\s-*begin\\>" nil t)))
;; scan for all declared signal names
(goto-char beg)
(while (re-search-forward "^\\s-*\\(\\(signal\\)\\|alias\\)\\>" end t)
(when (= 0 (nth 0 (parse-partial-sexp beg (point))))
(if (match-string 2)
;; scan signal name
(while (looking-at "[ \t\n,]+\\(\\w+\\)")
(setq signal-list
(cons (downcase (match-string 1)) signal-list))
(goto-char (match-end 0)))
;; scan alias name, check is alias of (declared) signal
(when (and (looking-at "[ \t\n]+\\(\\w+\\)[^;]*\\<is[ \t\n]+\\(\\w+\\)")
(member (downcase (match-string 2)) signal-list))
(setq signal-list
(cons (downcase (match-string 1)) signal-list))
(goto-char (match-end 0))))))
(goto-char beg)))
signal-list)))