Function: c-debug-sws-msg
c-debug-sws-msg is a macro defined in cc-engine.el.gz.
Signature
(c-debug-sws-msg &rest ARGS)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/cc-engine.el.gz
;; Tools for skipping over syntactic whitespace.
;; The following functions use text properties to cache searches over
;; large regions of syntactic whitespace. It works as follows:
;;
;; o If a syntactic whitespace region contains anything but simple
;; whitespace (i.e. space, tab and line breaks), the text property
;; `c-in-sws' is put over it. At places where we have stopped
;; within that region there's also a `c-is-sws' text property.
;; That since there typically are nested whitespace inside that
;; must be handled separately, e.g. whitespace inside a comment or
;; cpp directive. Thus, from one point with `c-is-sws' it's safe
;; to jump to another point with that property within the same
;; `c-in-sws' region. It can be likened to a ladder where
;; `c-in-sws' marks the bars and `c-is-sws' the rungs.
;;
;; o The `c-is-sws' property is put on the simple whitespace chars at
;; a "rung position" and also maybe on the first following char.
;; As many characters as can be conveniently found in this range
;; are marked, but no assumption can be made that the whole range
;; is marked (it could be clobbered by later changes, for
;; instance).
;;
;; Note that some part of the beginning of a sequence of simple
;; whitespace might be part of the end of a preceding line comment
;; or cpp directive and must not be considered part of the "rung".
;; Such whitespace is some amount of horizontal whitespace followed
;; by a newline. In the case of cpp directives it could also be
;; two newlines with horizontal whitespace between them.
;;
;; The reason to include the first following char is to cope with
;; "rung positions" that don't have any ordinary whitespace. If
;; `c-is-sws' is put on a token character it does not have
;; `c-in-sws' set simultaneously. That's the only case when that
;; can occur, and the reason for not extending the `c-in-sws'
;; region to cover it is that the `c-in-sws' region could then be
;; accidentally merged with a following one if the token is only
;; one character long.
;;
;; o On buffer changes the `c-in-sws' and `c-is-sws' properties are
;; removed in the changed region. If the change was inside
;; syntactic whitespace that means that the "ladder" is broken, but
;; a later call to `c-forward-sws' or `c-backward-sws' will use the
;; parts on either side and use an ordinary search only to "repair"
;; the gap.
;;
;; Special care needs to be taken if a region is removed: If there
;; are `c-in-sws' on both sides of it which do not connect inside
;; the region then they can't be joined. If e.g. a marked macro is
;; broken, syntactic whitespace inside the new text might be
;; marked. If those marks would become connected with the old
;; `c-in-sws' range around the macro then we could get a ladder
;; with one end outside the macro and the other at some whitespace
;; within it.
;;
;; The main motivation for this system is to increase the speed in
;; skipping over the large whitespace regions that can occur at the
;; top level in e.g. header files that contain a lot of comments and
;; cpp directives. For small comments inside code it's probably
;; slower than using `forward-comment' straightforwardly, but speed is
;; not a significant factor there anyway.
; (defface c-debug-is-sws-face
; '((t (:background "GreenYellow")))
; "Debug face to mark the `c-is-sws' property.")
; (defface c-debug-in-sws-face
; '((t (:underline t)))
; "Debug face to mark the `c-in-sws' property.")
; (defun c-debug-put-sws-faces ()
; ;; Put the sws debug faces on all the `c-is-sws' and `c-in-sws'
; ;; properties in the buffer.
; (interactive)
; (save-excursion
; (c-save-buffer-state (in-face)
; (goto-char (point-min))
; (setq in-face (if (get-text-property (point) 'c-is-sws)
; (point)))
; (while (progn
; (goto-char (next-single-property-change
; (point) 'c-is-sws nil (point-max)))
; (if in-face
; (progn
; (c-debug-add-face in-face (point) 'c-debug-is-sws-face)
; (setq in-face nil))
; (setq in-face (point)))
; (not (eobp))))
; (goto-char (point-min))
; (setq in-face (if (get-text-property (point) 'c-in-sws)
; (point)))
; (while (progn
; (goto-char (next-single-property-change
; (point) 'c-in-sws nil (point-max)))
; (if in-face
; (progn
; (c-debug-add-face in-face (point) 'c-debug-in-sws-face)
; (setq in-face nil))
; (setq in-face (point)))
; (not (eobp)))))))
(defmacro c-debug-sws-msg (&rest _args)
;; (declare (debug t))
;;`(message ,@args)
)