X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a9faac5c6333bcbfb30a00debf3de7a44e430e49..e499e60744fbb692201564743fc9859fa63a1196:/lisp/cedet/srecode/cpp.el diff --git a/lisp/cedet/srecode/cpp.el b/lisp/cedet/srecode/cpp.el index 62ee6be42e..d63e1a7a49 100644 --- a/lisp/cedet/srecode/cpp.el +++ b/lisp/cedet/srecode/cpp.el @@ -1,6 +1,6 @@ ;;; srecode/cpp.el --- C++ specific handlers for Semantic Recoder -;; Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc. +;; Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam ;; Jan Moringen @@ -47,16 +47,16 @@ buffer contains a using NAMESPACE; statement " :group 'srecode-cpp :type '(repeat string)) -;;; :cpp ARGUMENT HANDLING +;;; :c ARGUMENT HANDLING ;; -;; When a :cpp argument is required, fill the dictionary with -;; information about the current C++ file. +;; When a :c argument is required, fill the dictionary with +;; information about the current C file. ;; -;; Error if not in a C++ mode. +;; Error if not in a C mode. ;;;###autoload -(defun srecode-semantic-handle-:cpp (dict) - "Add macros into the dictionary DICT based on the current c++ file. +(defun srecode-semantic-handle-:c (dict) + "Add macros into the dictionary DICT based on the current c file. Adds the following: FILENAME_SYMBOL - filename converted into a C compat symbol. HEADER - Shown section if in a header file." @@ -76,6 +76,21 @@ HEADER - Shown section if in a header file." ) ) +;;; :cpp ARGUMENT HANDLING +;; +;; When a :cpp argument is required, fill the dictionary with +;; information about the current C++ file. +;; +;; Error if not in a C++ mode. +;;;###autoload +(defun srecode-semantic-handle-:cpp (dict) + "Add macros into the dictionary DICT based on the current c file. +Calls `srecode-semantic-handle-:c. +Also adds the following: + - nothing -" + (srecode-semantic-handle-:c dict) + ) + (defun srecode-semantic-handle-:using-namespaces (dict) "Add macros into the dictionary DICT based on used namespaces. Adds the following: @@ -94,10 +109,15 @@ PREFIX_NAMESPACE - for each NAMESPACE in `srecode-cpp-namespaces'." ) (define-mode-local-override srecode-semantic-apply-tag-to-dict - c++-mode (tag-wrapper dict) - "Apply C++ specific features from TAG-WRAPPER into DICT. + c-mode (tag-wrapper dict) + "Apply C and C++ specific features from TAG-WRAPPER into DICT. Calls `srecode-semantic-apply-tag-to-dict-default' first. Adds -special behavior for tag of classes include, using and function." +special behavior for tag of classes include, using and function. + +This function cannot be split into C and C++ specific variants, as +the way the tags are created from the parser does not distinguish +either. The side effect is that you could get some C++ tag properties +specified in a C file." ;; Use default implementation to fill in the basic properties. (srecode-semantic-apply-tag-to-dict-default tag-wrapper dict) @@ -150,14 +170,20 @@ special behavior for tag of classes include, using and function." (templates (semantic-tag-get-attribute tag :template)) (modifiers (semantic-tag-modifiers tag))) - ;; Add modifiers into the dictionary + ;; Mark constructors and destructors as such. + (when (semantic-tag-function-constructor-p tag) + (srecode-dictionary-show-section dict "CONSTRUCTOR")) + (when (semantic-tag-function-destructor-p tag) + (srecode-dictionary-show-section dict "DESTRUCTOR")) + + ;; Add modifiers into the dictionary. (dolist (modifier modifiers) (let ((modifier-dict (srecode-dictionary-add-section-dictionary dict "MODIFIERS"))) (srecode-dictionary-set-value modifier-dict "NAME" modifier))) ;; Add templates into child dictionaries. - (srecode-cpp-apply-templates dict templates) + (srecode-c-apply-templates dict templates) ;; When the function is a member function, it can have ;; additional modifiers. @@ -171,8 +197,7 @@ special behavior for tag of classes include, using and function." ;; If the member function is pure virtual, add a dictionary ;; entry. (when (semantic-tag-get-attribute tag :pure-virtual-flag) - (srecode-dictionary-show-section dict "PURE")) - ))) + (srecode-dictionary-show-section dict "PURE"))))) ;; ;; CLASS @@ -184,7 +209,7 @@ special behavior for tag of classes include, using and function." ;; Add templates into child dictionaries. (let ((templates (semantic-tag-get-attribute tag :template))) - (srecode-cpp-apply-templates dict templates)))) + (srecode-c-apply-templates dict templates)))) )) ) @@ -192,7 +217,7 @@ special behavior for tag of classes include, using and function." ;;; Helper functions ;; -(defun srecode-cpp-apply-templates (dict templates) +(defun srecode-c-apply-templates (dict templates) "Add section dictionaries for TEMPLATES to DICT." (when templates (let ((templates-dict (srecode-dictionary-add-section-dictionary