Function: semantic-tag-protection-c-mode
semantic-tag-protection-c-mode is a byte-compiled function defined in
c.el.gz.
Signature
(semantic-tag-protection-c-mode TAG &optional PARENT)
Documentation
Return the protection of TAG in PARENT.
Override function for semantic-tag-protection.
Override semantic-tag-protection in c-mode buffers.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/bovine/c.el.gz
(define-mode-local-override semantic-tag-protection
c-mode (tag &optional parent)
"Return the protection of TAG in PARENT.
Override function for `semantic-tag-protection'."
(let ((mods (semantic-tag-modifiers tag))
(prot nil))
;; Check the modifiers for protection if we are not a child
;; of some class type.
(if (not (and parent (eq (semantic-tag-class parent) 'type)))
(while (and (not prot) mods)
(if (stringp (car mods))
(let ((s (car mods)))
;; A few silly defaults to get things started.
(setq prot (pcase s
((or "extern" "export") 'public)
("static" 'private)))))
(setq mods (cdr mods)))
;; If we have a typed parent, look for :public style labels.
(let ((pp (semantic-tag-type-members parent)))
(while (and pp (not (semantic-equivalent-tag-p (car pp) tag)))
(when (eq (semantic-tag-class (car pp)) 'label)
(setq prot
(pcase (semantic-tag-name (car pp))
("public" 'public)
("private" 'private)
("protected" 'protected)))
)
(setq pp (cdr pp)))))
(when (and (not prot) (eq (semantic-tag-class parent) 'type))
(setq prot
(pcase (semantic-tag-type parent)
("class" 'private)
("struct" 'public)
(_ 'unknown))))
(or prot
(if (and parent (semantic-tag-of-class-p parent 'type))
'public
nil))))