Function: semantic-analyze-dereference-metatype-stack

semantic-analyze-dereference-metatype-stack is a byte-compiled function defined in fcn.el.gz.

Signature

(semantic-analyze-dereference-metatype-stack TYPE SCOPE &optional TYPE-DECLARATION)

Documentation

Dereference metatypes repeatedly until we hit a real TYPE.

Uses semantic-analyze-dereference-metatype. Argument SCOPE is the scope object with additional items in which to search. Optional argument TYPE-DECLARATION is how TYPE was found referenced.

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/semantic/analyze/fcn.el.gz
(defun semantic-analyze-dereference-metatype-stack (type scope &optional type-declaration)
  "Dereference metatypes repeatedly until we hit a real TYPE.
Uses `semantic-analyze-dereference-metatype'.
Argument SCOPE is the scope object with additional items in which to search.
Optional argument TYPE-DECLARATION is how TYPE was found referenced."
  (let ((lasttype type)
        (lasttypedeclaration type-declaration)
	(nexttype (semantic-analyze-dereference-metatype type scope type-declaration))
	(idx 0))
    (catch 'metatype-recursion
      (while (and nexttype (not (semantic-tag-similar-p (car nexttype) lasttype)))
	(setq lasttype (car nexttype)
	      lasttypedeclaration (cadr nexttype))
	(setq nexttype (semantic-analyze-dereference-metatype lasttype scope lasttypedeclaration))
	(setq idx (1+ idx))
	(when (> idx 20) (message "Possible metatype recursion for %S"
				  (semantic-tag-name lasttype))
	      (throw 'metatype-recursion nil))
	))
    lasttype))