Function: semantic-analyze-dereference-metatype-1
semantic-analyze-dereference-metatype-1 is a byte-compiled function
defined in fcn.el.gz.
Signature
(semantic-analyze-dereference-metatype-1 ANS SCOPE)
Documentation
Do extra work after dereferencing a metatype.
ANS is the answer from the language specific query. SCOPE is the current scope.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/analyze/fcn.el.gz
;; @ TODO - the typecache can also return a stack of scope names.
(defun semantic-analyze-dereference-metatype-1 (ans scope)
"Do extra work after dereferencing a metatype.
ANS is the answer from the language specific query.
SCOPE is the current scope."
(require 'semantic/scope)
;; If ANS is a string, or if ANS is a short tag, we
;; need to do some more work to look it up.
(if (stringp ans)
;; The metatype is just a string... look it up.
(or (and scope (car-safe
;; @todo - should this be `find the best one'?
(semantic-scope-find ans 'type scope)))
(let ((tcsans nil))
(prog1
(setq tcsans
(semanticdb-typecache-find ans))
;; While going through the metatype, if we have
;; a scope, push our new cache in.
(when scope
(semantic-scope-set-typecache
scope (semantic-scope-tag-get-scope tcsans))
))
))
(when (and (semantic-tag-p ans)
(eq (semantic-tag-class ans) 'type))
;; We have a tag.
(if (semantic-tag-prototype-p ans)
;; It is a prototype.. find the real one.
(or (and scope
(car-safe
(semantic-scope-find (semantic-tag-name ans)
'type scope)))
(let ((tcsans nil))
(prog1
(setq tcsans
(semanticdb-typecache-find (semantic-tag-name ans)))
;; While going through the metatype, if we have
;; a scope, push our new cache in.
(when scope
(semantic-scope-set-typecache
scope (semantic-scope-tag-get-scope tcsans))
))))
;; We have a tag, and it is not a prototype.
ans))
))