              ;; ws signifies the end of the param
              ((string-match "[ \t\f\v\n\r]" cs)
               (setq state 2))
+	     ((string-match "[=]" cs)
+	      ;; = means what we slurped was a default-value for a param
+	      ;; go back to slurping param-name
+	      (setq state 0))
              ;; a legal char for an identifier
-             ((string-match "[A-Za-z_0-9]" cs)
+	     ;; (or . for object-access in default value)
+             ((string-match "[A-Za-z_0-9\.]" cs)
               t)
              (t
               (error "unexpected char (B)"))))


(defconst csharp-compilation-re-msbuild-error
  (concat
   "^[[:blank:]]*"
   "\\([^(\r\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): "
   "error [[:alnum:]]+: [^[\r\n]+\\[\\([^]\r\n]+\\)\\]$")
  "Regexp to match compilation error from msbuild.")

(defconst csharp-compilation-re-msbuild-warning
  (concat
   "^[[:blank:]]*"
   "\\([^(\r\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): "
   "warning [[:alnum:]]+: [^[\r\n]+\\[\\([^]\r\n]+\\)\\]$")
  "Regexp to match compilation warning from msbuild.")

(defconst csharp-compilation-re-xbuild-error
  (concat
   "^[[:blank:]]*"
   "\\([^(\r\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): "
   "error [[:alnum:]]+: .+$")
  "Regexp to match compilation error from xbuild.")

(defconst csharp-compilation-re-xbuild-warning
  (concat
   "^[[:blank:]]*"
   "\\([^(\r\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): "
   "warning [[:alnum:]]+: .+$")
  "Regexp to match compilation warning from xbuild.")


             (t
              (error "unexpected char (C)"))))

	   ;; in a quoted context of a default-value.
	   ;; we're basically waiting for a matching quote, to go back to slurping param-name
	   ((= state 5)
	    (cond
	     ((equal quoting cs)
	      ;; we're back to unquoted! slurp param-name!
	      (setq state 0))
	     (t
	      t)))
           )

          (decf i))
