Function: verilog-backward-token
verilog-backward-token is an interactive and byte-compiled function
defined in verilog-mode.el.gz.
Signature
(verilog-backward-token)
Documentation
Step backward token, returning true if this is a continued line.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
(defun verilog-backward-token ()
"Step backward token, returning true if this is a continued line."
(interactive)
(verilog-backward-syntactic-ws)
(cond
((bolp)
nil)
(;-- Anything ending in a ; is complete
(= (preceding-char) ?\;)
nil)
(; If a "}" is prefixed by a ";", then this is a complete statement
;; i.e.: constraint foo { a = b; }
(= (preceding-char) ?\})
(progn
(backward-char)
(not(verilog-at-close-constraint-p))))
(;-- constraint foo { a = b }
;; is a complete statement. *sigh*
(= (preceding-char) ?\{)
(progn
(backward-char)
(not (verilog-at-constraint-p))))
(;" string "
(= (preceding-char) ?\")
(backward-char)
(verilog-skip-backward-comment-or-string)
nil)
(; [3:4]
(= (preceding-char) ?\])
(backward-char)
(verilog-backward-open-bracket)
t)
(;-- Could be 'case (foo)' or 'always @(bar)' which is complete
;; also could be simply '@(foo)'
;; or foo u1 #(a=8)
;; (b, ... which ISN'T complete
;; Do we need this???
(= (preceding-char) ?\))
(progn
(backward-char)
(verilog-backward-up-list 1)
(verilog-backward-syntactic-ws)
(let ((back (point)))
(forward-word-strictly -1)
(cond
;;XX
((looking-at "\\<\\(always\\(_latch\\|_ff\\|_comb\\)?\\|case\\(\\|[xz]\\)\\|for\\(\\|each\\|ever\\)\\|i\\(f\\|nitial\\)\\|repeat\\|while\\)\\>")
(not (looking-at "\\<randcase\\>\\|\\<case[xz]?\\>[^:]")))
((looking-at verilog-uvm-statement-re)
nil)
((looking-at verilog-uvm-begin-re)
t)
((looking-at verilog-uvm-end-re)
t)
((looking-at verilog-ovm-statement-re)
nil)
((looking-at verilog-ovm-begin-re)
t)
((looking-at verilog-ovm-end-re)
t)
;; JBA find VMM macros
((looking-at verilog-vmm-statement-re)
nil )
((looking-at verilog-vmm-begin-re)
t)
((looking-at verilog-vmm-end-re)
nil)
;; JBA trying to catch macro lines with no ; at end
((looking-at "\\<`")
nil)
(t
(goto-char back)
(cond
((= (preceding-char) ?\@)
(backward-char)
(save-excursion
(verilog-backward-token)
(not (looking-at "\\<\\(always\\(_latch\\|_ff\\|_comb\\)?\\|initial\\|while\\)\\>"))))
((= (preceding-char) ?\#)
(backward-char))
(t t)))))))
(;-- any of begin|initial|while are complete statements; 'begin : foo' is also complete
t
(forward-word-strictly -1)
(while (or (= (preceding-char) ?\_)
(= (preceding-char) ?\@)
(= (preceding-char) ?\.))
(forward-word-strictly -1))
(cond
((looking-at "\\<else\\>")
t)
((looking-at verilog-behavioral-block-beg-re)
t)
((looking-at verilog-indent-re)
nil)
(t
(let
((back (point)))
(verilog-backward-syntactic-ws)
(cond
((= (preceding-char) ?\:)
(backward-char)
(verilog-backward-syntactic-ws)
(backward-sexp)
(if (looking-at verilog-nameable-item-re )
nil
t))
((= (preceding-char) ?\#)
(backward-char)
t)
((= (preceding-char) ?\`)
(backward-char)
t)
(t
(goto-char back)
t))))))))