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))))