Function: c-fdoc-shift-type-backward

c-fdoc-shift-type-backward is a macro defined in cc-engine.el.gz.

Signature

(c-fdoc-shift-type-backward &optional SHORT)

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/cc-engine.el.gz
;; Macro used inside `c-forward-decl-or-cast-1'.  It ought to be a
;; defsubst or perhaps even a defun, but it contains lots of free
;; variables that refer to things inside `c-forward-decl-or-cast-1'.
(defmacro c-fdoc-shift-type-backward (&optional short)
  ;; `c-forward-decl-or-cast-1' can consume an arbitrary length list
  ;; of types when parsing a declaration, which means that it
  ;; sometimes consumes the identifier in the declaration as a type.
  ;; This is used to "backtrack" and make the last type be treated as
  ;; an identifier instead.
  (declare (debug nil))
  `(progn
     ,(unless short
	;; These identifiers are bound only in the inner let.
	'(setq identifier-type at-type
	       identifier-start type-start
	       got-parens nil
	       got-identifier t
	       got-suffix t
	       got-suffix-after-parens id-start
	       paren-depth 0))

     (if (setq at-type (if (eq backup-at-type 'prefix)
			   t
			 backup-at-type))
	 (setq type-start backup-type-start
	       id-start backup-id-start)
       (setq type-start start-pos
	     id-start start-pos))

     ;; When these flags already are set we've found specifiers that
     ;; unconditionally signal these attributes - backtracking doesn't
     ;; change that.  So keep them set in that case.
     (or at-type-decl
	 (setq at-type-decl backup-at-type-decl))
     (or maybe-typeless
	 (setq maybe-typeless backup-maybe-typeless))

     ,(unless short
	;; This identifier is bound only in the inner let.
	'(setq start id-start))))