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)))))))) ;; )