From e4e864a0d64c3d7dfbfe54e74d0ebdfd4384e76a Mon Sep 17 00:00:00 2001 From: Eric Ludlam Date: Mon, 24 Nov 2014 12:36:29 -0500 Subject: [PATCH] semantic: Properly create canonical name for C++ type tag * lisp/cedet/semantic/bovine/c.el (semantic-format-tag-canonical-name): Add part for a type with :parent. Merge parent names together. (semantic-c-dereference-typedef): If type is tag, use canonical name. --- lisp/cedet/semantic/bovine/c.el | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el index a72b0ddb536..8739f8d615f 100644 --- a/lisp/cedet/semantic/bovine/c.el +++ b/lisp/cedet/semantic/bovine/c.el @@ -1422,8 +1422,18 @@ PARENT specifies a parent class. COLOR indicates that the text should be type colorized. Enhances the base class to search for the entire parent tree to make the name accurate." - (semantic-format-tag-canonical-name-default tag parent color) - ) + (cond + ((and (semantic-tag-of-class-p tag 'type) + (semantic-tag-get-attribute tag :parent)) + ;; We nee to combine the :parent into the tag name and continue on. + (let* ((par (semantic-tag-get-attribute tag :parent)) + (parstr (if (stringp par) par + (mapconcat 'identity par "::"))) + (clone (semantic-tag-clone + tag (concat parstr "::" (semantic-tag-name tag))))) + (semantic-format-tag-canonical-name-default clone parent color))) + (t (semantic-format-tag-canonical-name-default tag parent color)) + )) (define-mode-local-override semantic-format-tag-type c-mode (tag color) "Convert the data type of TAG to a string usable in tag formatting. @@ -1653,6 +1663,8 @@ SCOPE is not used, and TYPE-DECLARATION is used only if TYPE is not a typedef." (let* ((fname (semantic-tag-file-name type)) (def (semantic-tag-copy dt nil fname))) (list def def))) + ((semantic-tag-p dt) + (list (semantic-format-tag-canonical-name dt) dt)) ((stringp dt) (list dt (semantic-tag dt 'type))) ((consp dt) (list (car dt) dt)))) -- 2.39.5