emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/last-cedet-merge e4e864a 02/11: semantic: Properly


From: David Engster
Subject: [Emacs-diffs] scratch/last-cedet-merge e4e864a 02/11: semantic: Properly create canonical name for C++ type tag
Date: Mon, 23 Jan 2017 21:13:48 +0000 (UTC)

branch: scratch/last-cedet-merge
commit e4e864a0d64c3d7dfbfe54e74d0ebdfd4384e76a
Author: Eric Ludlam <address@hidden>
Commit: David Engster <address@hidden>

    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 a72b0dd..8739f8d 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))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]