Function: semantic-lex-spp-one-token-to-txt
semantic-lex-spp-one-token-to-txt is a byte-compiled function defined
in lex-spp.el.gz.
Signature
(semantic-lex-spp-one-token-to-txt TOK &optional BLOCKTOK)
Documentation
Convert the token TOK into a string.
If TOK is made of multiple tokens, convert those to text. This conversion is needed if a macro has a merge symbol in it that combines the text of two previously distinct symbols. For example, in c:
#define (a,b) a ## b;
If optional string BLOCKTOK matches the expanded value, then do not continue processing recursively.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/lex-spp.el.gz
;;; MACRO EXPANSION : Lexical token replacement
;;
;; When substituting in a macro from a token stream of formatted
;; semantic lex tokens, things can be much more complicated.
;;
;; Some macros have arguments that get set into the dynamic macro
;; table during replacement.
;;
;; In general, the macro tokens are substituted into the regular
;; token stream, but placed under the characters of the original
;; macro symbol.
;;
;; Argument lists are saved as a lexical token at the beginning
;; of a replacement value.
(defun semantic-lex-spp-one-token-to-txt (tok &optional blocktok)
"Convert the token TOK into a string.
If TOK is made of multiple tokens, convert those to text. This
conversion is needed if a macro has a merge symbol in it that
combines the text of two previously distinct symbols. For
example, in c:
#define (a,b) a ## b;
If optional string BLOCKTOK matches the expanded value, then do not
continue processing recursively."
(let ((txt (semantic-lex-token-text tok))
(sym nil)
)
(cond
;; Recursion prevention
((and (stringp blocktok) (string= txt blocktok))
blocktok)
;; A complex symbol
((and (eq (car tok) 'symbol)
(setq sym (semantic-lex-spp-symbol txt))
(not (semantic-lex-spp-macro-with-args (symbol-value sym)))
)
;; Now that we have a symbol,
(let ((val (symbol-value sym)))
(cond
;; This is another lexical token.
((and (consp val)
(symbolp (car val)))
(semantic-lex-spp-one-token-to-txt val txt))
;; This is a list of tokens.
((and (consp val)
(consp (car val))
(symbolp (car (car val))))
(mapconcat (lambda (subtok)
(semantic-lex-spp-one-token-to-txt subtok))
val))
;; If val is nil, that's probably wrong.
;; Found a system header case where this was true.
((null val) "")
;; Debug weird stuff.
(t (debug)))
))
((stringp txt)
txt)
(t nil))
))