Function: verilog-read-sub-decls-line

verilog-read-sub-decls-line is a byte-compiled function defined in verilog-mode.el.gz.

Signature

(verilog-read-sub-decls-line SUBMODDECLS PAR-VALUES COMMENT)

Documentation

For verilog-read-sub-decls, read lines of port defs until none match.

Inserts the list of signals found, using submodi to look up each port.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
(defun verilog-read-sub-decls-line (submoddecls par-values comment)
  "For `verilog-read-sub-decls', read lines of port defs until none match.
Inserts the list of signals found, using submodi to look up each port."
  (let (done port)
    (save-excursion
      (forward-line 1)
      (while (not done)
	;; Get port name
	(cond ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*(\\s-*")
	       (setq port (match-string-no-properties 1))
	       (goto-char (match-end 0)))
	      ;; .\escaped (
	      ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*(\\s-*")
               (setq port (concat (match-string-no-properties 1) " "))  ; escaped id's need trailing space
	       (goto-char (match-end 0)))
	      ;; .name
	      ((looking-at "\\s-*\\.\\s-*\\([a-zA-Z0-9`_$]*\\)\\s-*[,)/]")
	       (verilog-read-sub-decls-sig
                submoddecls par-values comment (match-string-no-properties 1) t ; sig==t for .name
		nil nil nil) ; vec multidim mem
	       (setq port nil))
	      ;; .\escaped_name
	      ((looking-at "\\s-*\\.\\s-*\\(\\\\[^ \t\n\f]*\\)\\s-*[,)/]")
	       (verilog-read-sub-decls-sig
                submoddecls par-values comment (concat (match-string-no-properties 1) " ") t ; sig==t for .name
		nil nil nil) ; vec multidim mem
	       (setq port nil))
	      ;; random
	      ((looking-at "\\s-*\\.[^(]*(")
               (setq port nil)  ; skip this line
	       (goto-char (match-end 0)))
	      (t
               (setq port nil  done t)))  ; Unknown, ignore rest of line
	;; Get signal name.  Point is at the first-non-space after (
	;; We intentionally ignore (non-escaped) signals with .s in them
	;; this prevents AUTOWIRE etc from noticing hierarchical sigs.
	(when port
          (cond ((and verilog-auto-ignore-concat
                      (looking-at "[({]"))
                 nil) ; {...} or (...) historically ignored with auto-ignore-concat
                ((looking-at "[^\n]*AUTONOHOOKUP"))
                ((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*)")
		 (verilog-read-sub-decls-sig
                  submoddecls par-values comment port
		  (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
		  nil nil nil)) ; vec multidim mem
		;;
		((looking-at "\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\s-*\\(\\[[^][]+\\]\\)\\s-*)")
		 (verilog-read-sub-decls-sig
                  submoddecls par-values comment port
		  (verilog-string-remove-spaces (match-string-no-properties 1)) ; sig
		  (match-string-no-properties 2) nil nil)) ; vec multidim mem
		;; Fastpath was above looking-at's.
		;; For something more complicated invoke a parser
		((looking-at "[^)]+")
		 (verilog-read-sub-decls-expr
                  submoddecls par-values comment port
		  (buffer-substring-no-properties
		   (point) (1- (progn (search-backward "(") ; start at (
				      (verilog-forward-sexp-ign-cmt 1)
				      (point)))))))) ; expr
	;;
	(forward-line 1)))))