emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] scratch/last-cedet-merge 5cb7aed 22/50: semantic: New c-mo


From: David Engster
Subject: [Emacs-diffs] scratch/last-cedet-merge 5cb7aed 22/50: semantic: New c-mode override for analyzing tag type members
Date: Wed, 25 Jan 2017 22:15:21 +0000 (UTC)

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

    semantic: New c-mode override for analyzing tag type members
    
    * lisp/cedet/semantic/bovine/c.el (semantic-analyze-tag-type-members):
     New override.
---
 lisp/cedet/semantic/bovine/c.el |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lisp/cedet/semantic/bovine/c.el b/lisp/cedet/semantic/bovine/c.el
index 48521f9..449a763 100644
--- a/lisp/cedet/semantic/bovine/c.el
+++ b/lisp/cedet/semantic/bovine/c.el
@@ -1872,6 +1872,23 @@ These are constants which are of type TYPE."
   "Assemble the list of names NAMELIST into a namespace name."
   (mapconcat 'identity namelist "::"))
 
+(define-mode-local-override semantic-analyze-tag-type-members c-mode (tag)
+  "Return a list of :members of TAG.
+Merges in all members of anonymous unions that are :members of TAG."
+  (let ((raw (semantic-tag-type-members tag))
+       (ans nil))
+    (dolist (T raw)
+      (cond ((and (semantic-tag-of-class-p T 'type)
+                  (semantic-tag-of-type-p T "union")
+                  (string= (semantic-tag-name T) ""))
+            ;; Merge in all the union members.
+            (dolist (Ts (semantic-analyze-tag-type-members T))
+              (setq ans (cons Ts ans))))
+           ;; Be default, just push the tag.
+           (t
+            (setq ans (cons T ans)))))
+    (nreverse ans)))
+
 (define-mode-local-override semantic-ctxt-scoped-types c++-mode (&optional 
point)
   "Return a list of tags of CLASS type based on POINT.
 DO NOT return the list of tags encompassing point."



reply via email to

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