Function: semantic-c-dereference-namespace-alias
semantic-c-dereference-namespace-alias is a byte-compiled function
defined in c.el.gz.
Signature
(semantic-c-dereference-namespace-alias TYPE NAMESPACE)
Documentation
Dereference TYPE in NAMESPACE, given that NAMESPACE is an alias.
Checks if NAMESPACE is an alias and if so, returns a new type with a fully qualified name in the original namespace. Returns nil if NAMESPACE is not an alias.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/bovine/c.el.gz
(defun semantic-c-dereference-namespace-alias (type namespace)
"Dereference TYPE in NAMESPACE, given that NAMESPACE is an alias.
Checks if NAMESPACE is an alias and if so, returns a new type
with a fully qualified name in the original namespace. Returns
nil if NAMESPACE is not an alias."
(when (eq (semantic-tag-get-attribute namespace :kind) 'alias)
(let ((typename (semantic-analyze-split-name (semantic-tag-name type)))
ns nstype originaltype) ;; newtype
;; Make typename unqualified
(setq typename (if (listp typename)
(last typename)
(list typename)))
(when
(and
;; Get original namespace and make sure TYPE exists there.
(setq ns (semantic-tag-name
(car (semantic-tag-get-attribute namespace :members))))
(setq nstype (semanticdb-typecache-find ns))
(setq originaltype (semantic-find-tags-by-name
(car typename)
(semantic-tag-get-attribute nstype :members))))
;; Construct new type with name in original namespace.
(setq ns (semantic-analyze-split-name ns))
;; (setq newtype
(semantic-tag-clone
(car originaltype)
(semantic-analyze-unsplit-name
(if (listp ns)
(append ns typename)
(append (list ns) typename)))))))) ;; )