    "\\(\\<package\\>\\)\\|"
    "\\(\\<final\\>\\)\\|"
    "\\(@\\)\\|"
-   "\\(\\<while\\>\\)\\|"
+   "\\(\\<while\\>\\)\\|\\(\\<do\\>\\)\\|"
    "\\(\\<for\\(ever\\|each\\)?\\>\\)\\|"
    "\\(\\<repeat\\>\\)\\|\\(\\<wait\\>\\)\\|"
    "#"))

     ;; from http://www.emacswiki.org/emacs/MultilineRegexp
     (concat "\\<\\(`define\\|`if\\)\\>" ;; directive
	     "\\s-+" ;; separator
	     "\\(.*\\(?:\n.*\\)*?\\)" ;; definition: to tend of line, the maybe more lines (excludes any trailing \n)
	     "\\(?:\n\\s-*\n\\|\\'\\)") ;; blank line or EOF
     "\\)"
     )))


(defun verilog-at-constraint-p ()
  "If at the { of a constraint or coverpoint definition, return true, moving point to constraint."
  (if (save-excursion
	(let ((p (point)))
	(and
	 (equal (char-after) ?\{)
	 (forward-list)
	 (progn (backward-char 1)
		(verilog-backward-ws&directives)
	  (and
		(or (equal (char-before) ?\{) ;; empty case
                    (equal (char-before) ?\;)
                    (equal (char-before) ?\}))
                    ;; skip what looks like bus repitition operator {#{
                    (not (string-match "^{\\s-*[0-9]+\\s-*{" (buffer-substring p (point)))))))))
      (progn
        (let ( (pt (point)) (pass 0))
          (verilog-backward-ws&directives)
