Function: semantic-lex-spp-analyzer-push-tokens-for-symbol
semantic-lex-spp-analyzer-push-tokens-for-symbol is a byte-compiled
function defined in lex-spp.el.gz.
Signature
(semantic-lex-spp-analyzer-push-tokens-for-symbol STR BEG END)
Documentation
Push lexical tokens for the symbol or keyword STR.
STR occurs in the current buffer between BEG and END.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/lex-spp.el.gz
(defun semantic-lex-spp-analyzer-push-tokens-for-symbol (str beg end)
"Push lexical tokens for the symbol or keyword STR.
STR occurs in the current buffer between BEG and END."
(let (sym val count)
(cond
;;
;; It is a macro. Prepare for a replacement.
((and semantic-lex-spp-replacements-enabled
(semantic-lex-spp-symbol-p str))
(setq sym (semantic-lex-spp-symbol str)
val (symbol-value sym)
count 0)
(let ((semantic-lex-spp-expanded-macro-stack
semantic-lex-spp-expanded-macro-stack))
(semantic-lex-with-macro-used str
;; Do direct replacements of single value macros of macros.
;; This solves issues with a macro containing one symbol that
;; is another macro, and get arg lists passed around.
(while (and val (consp val)
(semantic-lex-token-p (car val))
(eq (length val) 1)
(eq (semantic-lex-token-class (car val)) 'symbol)
(semantic-lex-spp-symbol-p (semantic-lex-token-text (car val)))
(< count 10)
)
(setq str (semantic-lex-token-text (car val)))
(setq sym (semantic-lex-spp-symbol str)
val (symbol-value sym))
;; Prevent recursion
(setq count (1+ count))
;; This prevents a different kind of recursion.
(push str semantic-lex-spp-expanded-macro-stack)
)
(semantic-lex-spp-analyzer-do-replace sym val beg end))
))
;; Anything else.
(t
;; A regular keyword.
(semantic-lex-push-token
(semantic-lex-token (or (semantic-lex-keyword-p str) 'symbol)
beg end))))
))