Function: semantic-lex-spp-analyzer-do-replace
semantic-lex-spp-analyzer-do-replace is a byte-compiled function
defined in lex-spp.el.gz.
Signature
(semantic-lex-spp-analyzer-do-replace SYM VAL BEG END)
Documentation
Do the lexical replacement for SYM with VAL.
Argument BEG and END specify the bounds of SYM in the buffer.
Aliases
semantic-lex-spp-anlyzer-do-replace (obsolete since 25.1)
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/lex-spp.el.gz
;;; --------------------------------------------------------
;;;
;;; ANALYZERS:
;;;
;;; Symbol Is Macro
;;
;; An analyzer that will push tokens from a macro in place
;; of the macro symbol.
;;
(defun semantic-lex-spp-analyzer-do-replace (_sym val beg end)
"Do the lexical replacement for SYM with VAL.
Argument BEG and END specify the bounds of SYM in the buffer."
(if (not val)
(setq semantic-lex-end-point end)
(let ((arg-in nil)
(arg-parsed nil)
(arg-split nil)
)
;; Check for arguments.
(setq arg-in (semantic-lex-spp-macro-with-args val))
(when arg-in
(save-excursion
(goto-char end)
(setq arg-parsed
(semantic-lex-spp-one-token-and-move-for-macro
;; NOTE: This used to be (point-at-eol), but
;; that was too close for multi-line arguments
;; to a macro. Point max may be too far if there
;; is a typo in the buffer.
;;
;; Look here for performance issues while a user is typing
;; incomplete code.
(point-max)))
(setq end (semantic-lex-token-end arg-parsed))
(when (and (listp arg-parsed) (eq (car arg-parsed) 'semantic-list))
(setq arg-split
;; Use lex to split up the contents of the argument list.
(semantic-lex-spp-stream-for-arglist arg-parsed)
))
))
;; if we have something to sub in, then do it.
(semantic-lex-spp-macro-to-macro-stream val beg end arg-split)
(setq semantic-lex-end-point end)
)
))