Function: verilog-inject-inst
verilog-inject-inst is a byte-compiled function defined in
verilog-mode.el.gz.
Signature
(verilog-inject-inst)
Documentation
Inject AUTOINST into new code. See verilog-inject-auto.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
(defun verilog-inject-inst ()
"Inject AUTOINST into new code. See `verilog-inject-auto'."
(save-excursion
(goto-char (point-min))
;; It's hard to distinguish modules; we'll instead search for pins.
(while (verilog-re-search-forward-quick "\\.\\s *[a-zA-Z0-9`_$]+\\s *(\\s *[a-zA-Z0-9`_$]+\\s *)" nil t)
(verilog-backward-open-paren) ; Inst start
(cond
((= (preceding-char) ?\#) ; #(...) parameter section, not pin. Skip.
(forward-char 1)
(verilog-forward-close-paren)) ; Parameters done
(t
(forward-char 1)
(let ((indent-pt (+ (current-column)))
(end-pt (save-excursion (verilog-forward-close-paren) (point))))
(cond ((verilog-re-search-forward-quick "\\(/\\*AUTOINST\\((.*?)\\)?\\*/\\|\\.\\*\\)" end-pt t)
(goto-char end-pt)) ; Already there, continue search with next instance
(t
;; Delete identical interconnect
(let ((case-fold-search nil)) ; So we don't convert upper-to-lower, etc
(while (verilog-re-search-forward-quick "\\.\\s *\\([a-zA-Z0-9`_$]+\\)\\s *(\\s *\\1\\s *)\\s *" end-pt t)
(delete-region (match-beginning 0) (match-end 0))
(setq end-pt (- end-pt (- (match-end 0) (match-beginning 0)))) ; Keep it correct
(while (or (looking-at "[ \t\n\f,]+")
(looking-at "//[^\n]*"))
(delete-region (match-beginning 0) (match-end 0))
(setq end-pt (- end-pt (- (match-end 0) (match-beginning 0)))))))
(verilog-forward-close-paren)
(backward-char 1)
;; Not verilog-re-search, as we don't want to strip comments
(while (re-search-backward "[ \t\n\f]+" (- (point) 1) t)
(delete-region (match-beginning 0) (match-end 0)))
(verilog-insert "\n")
(verilog-insert-indent "/*AUTOINST*/")))))))))