Variable: semantic-lex-c-namespace-begin-nested-macro
semantic-lex-c-namespace-begin-nested-macro is a variable defined in
c.el.gz.
Value
Large value
((looking-at
"\\(_GLIBCXX_BEGIN_NESTED_NAMESPACE\\)(\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*,\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*)")
(goto-char (match-end 0))
(let*
((nsend (match-end 1)) (sym-start (match-beginning 2))
(sym-end (match-end 2))
(ms (buffer-substring-no-properties sym-start sym-end))
(sym2-start (match-beginning 3)) (sym2-end (match-end 3))
(ms2 (buffer-substring-no-properties sym2-start sym2-end)))
(semantic-lex-push-token
(semantic-lex-token 'NAMESPACE (match-beginning 0) nsend
"namespace"))
(semantic-lex-push-token
(semantic-lex-token 'symbol sym-start sym-end ms))
(goto-char (match-end 0))
(let ((start (point)) (end 0))
(when (re-search-forward "_GLIBCXX_END_NESTED_NAMESPACE" nil t)
(setq end (point))
(if semantic-lex-c-nested-namespace-ignore-second
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake)))
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake-plus
(semantic-lex-token 'NAMESPACE
sym-end
sym2-start
"namespace")
(semantic-lex-token 'symbol
sym2-start
sym2-end ms2)
(semantic-lex-token 'semantic-list
start end
(list
'prefix-fake)))))))))
(setq semantic-lex-end-point (point)))
Documentation
Handle G++'s namespace macros which the pre-processor can't handle.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/bovine/c.el.gz
(define-lex-regex-analyzer semantic-lex-c-namespace-begin-nested-macro
"Handle G++'s namespace macros which the pre-processor can't handle."
"\\(_GLIBCXX_BEGIN_NESTED_NAMESPACE\\)(\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*,\\s-*\\(\\(?:\\w\\|\\s_\\)+\\)\\s-*)"
(goto-char (match-end 0))
(let* ((nsend (match-end 1))
(sym-start (match-beginning 2))
(sym-end (match-end 2))
(ms (buffer-substring-no-properties sym-start sym-end))
(sym2-start (match-beginning 3))
(sym2-end (match-end 3))
(ms2 (buffer-substring-no-properties sym2-start sym2-end)))
;; Push the namespace keyword.
(semantic-lex-push-token
(semantic-lex-token 'NAMESPACE (match-beginning 0) nsend "namespace"))
;; Push the name.
(semantic-lex-push-token
(semantic-lex-token 'symbol sym-start sym-end ms))
(goto-char (match-end 0))
(let ((start (point))
(end 0))
;; If we can't find a matching end, then create the fake list.
(when (re-search-forward "_GLIBCXX_END_NESTED_NAMESPACE" nil t)
(setq end (point))
(if semantic-lex-c-nested-namespace-ignore-second
;; The same as _GLIBCXX_BEGIN_NAMESPACE
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake)))
;; Do both the top and second level namespace
(semantic-lex-push-token
(semantic-lex-token 'semantic-list start end
;; We'll depend on a quick hack
(list 'prefix-fake-plus
(semantic-lex-token 'NAMESPACE
sym-end sym2-start
"namespace")
(semantic-lex-token 'symbol
sym2-start sym2-end
ms2)
(semantic-lex-token 'semantic-list start end
(list 'prefix-fake)))
)))
)))
(setq semantic-lex-end-point (point)))