annotate lisp/cedet/semantic/tag.el @ 106840:5df8e547a422

Fix typos in docstrings.
author Juanma Barranquero <lekktu@gmail.com>
date Thu, 14 Jan 2010 19:59:31 +0100
parents 1d1d5d9bd884
children a5ad4f188e19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104447
273e528a9f9b * emacs-lisp/autoload.el (generated-autoload-load-name): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 104446
diff changeset
1 ;;; semantic/tag.el --- tag creation and access
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105842
diff changeset
4 ;; 2009, 2010 Free Software Foundation, Inc.
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: Eric M. Ludlam <zappo@gnu.org>
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; (at your option) any later version.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; GNU General Public License for more details.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23 ;;; Commentary:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;; I. The core production of semantic is the list of tags produced by the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;; different parsers. This file provides 3 APIs related to tag access:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;; 1) Primitive Tag Access
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29 ;; There is a set of common features to all tags. These access
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 ;; functions can get these values.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;; 2) Standard Tag Access
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 ;; A Standard Tag should be produced by most traditional languages
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 ;; with standard styles common to typed object oriented languages.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 ;; These functions can access these data elements from a tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35 ;; 3) Generic Tag Access
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 ;; Access to tag structure in a more direct way.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 ;; ** May not be forward compatible.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 ;; II. There is also an API for tag creation. Use `semantic-tag' to create
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 ;; a new tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 ;;
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
42 ;; III. Tag Comparison. Allows explicit or comparative tests to see
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 ;; if two tags are the same.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45 ;;; Code:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 ;; Keep this only so long as we have obsolete fcns.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 (require 'semantic/fw)
104418
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
50 (require 'semantic/lex)
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
51
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
52 (declare-function semantic-analyze-split-name "semantic/analyze/fcn")
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
53 (declare-function semantic-fetch-tags "semantic")
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
54 (declare-function semantic-clear-toplevel-cache "semantic")
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55
104439
da5b2513c225 cedet/cedet.el (cedet-packages): Bump srecode version.
Chong Yidong <cyd@stupidchicken.com>
parents: 104418
diff changeset
56 (defconst semantic-tag-version "2.0pre7"
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 "Version string of semantic tags made with this code.")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 (defconst semantic-tag-incompatible-version "1.0"
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 "Version string of semantic tags which are not currently compatible.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 These old style tags may be loaded from a file with semantic db.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 In this case, we must flush the old tags and start over.")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 ;;; Primitive Tag access system:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 ;; Raw tags in semantic are lists of 5 elements:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 ;; (NAME CLASS ATTRIBUTES PROPERTIES OVERLAY)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 ;; Where:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 ;; - NAME is a string that represents the tag name.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 ;; - CLASS is a symbol that represent the class of the tag (for
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 ;; example, usual classes are `type', `function', `variable',
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 ;; `include', `package', `code').
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 ;; - ATTRIBUTES is a public list of attributes that describes
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79 ;; language data represented by the tag (for example, a variable
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 ;; can have a `:constant-flag' attribute, a function an `:arguments'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 ;; attribute, etc.).
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 ;; - PROPERTIES is a private list of properties used internally.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 ;; - OVERLAY represent the location of data described by the tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 (defsubst semantic-tag-name (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 "Return the name of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 For functions, variables, classes, typedefs, etc., this is the identifier
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 that is being defined. For tags without an obvious associated name, this
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 may be the statement type, e.g., this may return @code{print} for python's
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 print statement."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 (car tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 (defsubst semantic-tag-class (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 "Return the class of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 That is, the symbol 'variable, 'function, 'type, or other.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 There is no limit to the symbols that may represent the class of a tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 Each parser generates tags with classes defined by it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 For functional languages, typical tag classes are:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 @table @code
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 @item type
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 Data types, named map for a memory block.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 @item function
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 A function or method, or named execution location.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 @item variable
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 A variable, or named storage for data.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 @item include
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 Statement that represents a file from which more tags can be found.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 @item package
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
114 Statement that declares this file's package name.
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 @item code
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 Code that has not name or binding to any other symbol, such as in a script.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 @end table
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 "
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 (nth 1 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 (defsubst semantic-tag-attributes (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 "Return the list of public attributes of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 That is a property list: (ATTRIBUTE-1 VALUE-1 ATTRIBUTE-2 VALUE-2...)."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 (nth 2 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 (defsubst semantic-tag-properties (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 "Return the list of private properties of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 That is a property list: (PROPERTY-1 VALUE-1 PROPERTY-2 VALUE-2...)."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 (nth 3 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 (defsubst semantic-tag-overlay (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 "Return the OVERLAY part of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 That is, an overlay or an unloaded buffer representation.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 This function can also return an array of the form [ START END ].
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 This occurs for tags that are not currently linked into a buffer."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 (nth 4 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 (defsubst semantic--tag-overlay-cdr (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 "Return the cons cell whose car is the OVERLAY part of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 (nthcdr 4 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (defsubst semantic--tag-set-overlay (tag overlay)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 "Set the overlay part of TAG with OVERLAY.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 (setcar (semantic--tag-overlay-cdr tag) overlay))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 (defsubst semantic-tag-start (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 "Return the start location of TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 (if (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 (semantic-overlay-start o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 (aref o 0))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 (defsubst semantic-tag-end (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 "Return the end location of TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 (if (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 (semantic-overlay-end o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (aref o 1))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 (defsubst semantic-tag-bounds (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 "Return the location (START END) of data TAG describes."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 (list (semantic-tag-start tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 (semantic-tag-end tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 (defun semantic-tag-set-bounds (tag start end)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 "In TAG, set the START and END location of data it describes."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 (if (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 (semantic-overlay-move o start end)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 (semantic--tag-set-overlay tag (vector start end)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 (defun semantic-tag-in-buffer-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 "Return the buffer TAG resides in IFF tag is already in a buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 If a tag is not in a buffer, return nil."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 ;; TAG is currently linked to a buffer, return it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 (when (and (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (semantic-overlay-live-p o))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 (semantic-overlay-buffer o))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 (defsubst semantic--tag-get-property (tag property)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184 "From TAG, extract the value of PROPERTY.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 Return the value found, or nil if PROPERTY is not one of the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 properties of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 (plist-get (semantic-tag-properties tag) property))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 (defun semantic-tag-buffer (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 "Return the buffer TAG resides in.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 If TAG has an originating file, read that file into a (maybe new)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 buffer, and return it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 Return nil if there is no buffer for this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 (let ((buff (semantic-tag-in-buffer-p tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 (if buff
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 buff
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 ;; TAG has an originating file, read that file into a buffer, and
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 ;; return it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (if (semantic--tag-get-property tag :filename)
104492
8db96f200ac8 Synch to Eric Ludlam's upstream CEDET repository.
Chong Yidong <cyd@stupidchicken.com>
parents: 104489
diff changeset
201 (save-match-data
8db96f200ac8 Synch to Eric Ludlam's upstream CEDET repository.
Chong Yidong <cyd@stupidchicken.com>
parents: 104489
diff changeset
202 (find-file-noselect (semantic--tag-get-property tag :filename)))
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 ;; TAG is not in Emacs right now, no buffer is available.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 ))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 (defun semantic-tag-mode (&optional tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 "Return the major mode active for TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 TAG defaults to the tag at point in current buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 If TAG has a :mode property return it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 If point is inside TAG bounds, return the major mode active at point.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 Return the major mode active at beginning of TAG otherwise.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212 See also the function `semantic-ctxt-current-mode'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (or tag (setq tag (semantic-current-tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 (or (semantic--tag-get-property tag :mode)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 (let ((buffer (semantic-tag-buffer tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 (start (semantic-tag-start tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (end (semantic-tag-end tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (save-excursion
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 (and buffer (set-buffer buffer))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 ;; Unless point is inside TAG bounds, move it to the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 ;; beginning of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (or (and (>= (point) start) (< (point) end))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 (goto-char start))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 (semantic-ctxt-current-mode)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (defsubst semantic--tag-attributes-cdr (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 "Return the cons cell whose car is the ATTRIBUTES part of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229 (nthcdr 2 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 (defsubst semantic-tag-put-attribute (tag attribute value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232 "Change value in TAG of ATTRIBUTE to VALUE.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 If ATTRIBUTE already exists, its value is set to VALUE, otherwise the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 new ATTRIBUTE VALUE pair is added.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 Return TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 Use this function in a parser when not all attributes are known at the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237 same time."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 (let* ((plist-cdr (semantic--tag-attributes-cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 (when (consp plist-cdr)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (setcar plist-cdr
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (semantic-tag-make-plist
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 (plist-put (car plist-cdr) attribute value))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 (defun semantic-tag-put-attribute-no-side-effect (tag attribute value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 "Change value in TAG of ATTRIBUTE to VALUE without side effects.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 All cons cells in the attribute list are replicated so that there
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 are no side effects if TAG is in shared lists.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 If ATTRIBUTE already exists, its value is set to VALUE, otherwise the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 new ATTRIBUTE VALUE pair is added.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
251 Return TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252 (let* ((plist-cdr (semantic--tag-attributes-cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 (when (consp plist-cdr)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 (setcar plist-cdr
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 (semantic-tag-make-plist
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256 (plist-put (copy-sequence (car plist-cdr))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257 attribute value))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 (defsubst semantic-tag-get-attribute (tag attribute)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 "From TAG, return the value of ATTRIBUTE.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 ATTRIBUTE is a symbol whose specification value to get.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263 Return the value found, or nil if ATTRIBUTE is not one of the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 attributes of TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 (plist-get (semantic-tag-attributes tag) attribute))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 ;; These functions are for internal use only!
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 (defsubst semantic--tag-properties-cdr (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 "Return the cons cell whose car is the PROPERTIES part of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 (nthcdr 3 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273 (defun semantic--tag-put-property (tag property value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 "Change value in TAG of PROPERTY to VALUE.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 If PROPERTY already exists, its value is set to VALUE, otherwise the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 new PROPERTY VALUE pair is added.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 Return TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 (let* ((plist-cdr (semantic--tag-properties-cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 (when (consp plist-cdr)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 (setcar plist-cdr
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 (semantic-tag-make-plist
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 (plist-put (car plist-cdr) property value))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 (defun semantic--tag-put-property-no-side-effect (tag property value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 "Change value in TAG of PROPERTY to VALUE without side effects.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 All cons cells in the property list are replicated so that there
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 are no side effects if TAG is in shared lists.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 If PROPERTY already exists, its value is set to VALUE, otherwise the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 new PROPERTY VALUE pair is added.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292 Return TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 That function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 (let* ((plist-cdr (semantic--tag-properties-cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (when (consp plist-cdr)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 (setcar plist-cdr
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (semantic-tag-make-plist
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 (plist-put (copy-sequence (car plist-cdr))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299 property value))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 (defun semantic-tag-file-name (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 "Return the name of the file from which TAG originated.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 Return nil if that information can't be obtained.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 If TAG is from a loaded buffer, then that buffer's filename is used.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 If TAG is unlinked, but has a :filename property, then that is used."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 (let ((buffer (semantic-tag-in-buffer-p tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 (if buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 (buffer-file-name buffer)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 (semantic--tag-get-property tag :filename))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 ;;; Tag tests and comparisons.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (defsubst semantic-tag-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 "Return non-nil if TAG is most likely a semantic tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 (condition-case nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 (and (consp tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 (stringp (car tag)) ; NAME
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 (symbolp (nth 1 tag)) (nth 1 tag) ; TAG-CLASS
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 (listp (nth 2 tag)) ; ATTRIBUTES
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 (listp (nth 3 tag)) ; PROPERTIES
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 ;; If an error occurs, then it most certainly is not a tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323 (error nil)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 (defsubst semantic-tag-of-class-p (tag class)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 "Return non-nil if class of TAG is CLASS."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 (eq (semantic-tag-class tag) class))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 (defsubst semantic-tag-type-members (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 "Return the members of the type that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 That is the value of the `:members' attribute."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 (semantic-tag-get-attribute tag :members))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333
104470
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
334 (defsubst semantic-tag-type (tag)
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
335 "Return the value of the `:type' attribute of TAG.
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
336 For a function it would be the data type of the return value.
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
337 For a variable, it is the storage type of that variable.
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
338 For a data type, the type is the style of datatype, such as
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
339 struct or union."
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
340 (semantic-tag-get-attribute tag :type))
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
341
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 (defun semantic-tag-with-position-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 "Return non-nil if TAG has positional information."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 (and (semantic-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 (or (and (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 (semantic-overlay-live-p o))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 (arrayp o)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (defun semantic-equivalent-tag-p (tag1 tag2)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 "Compare TAG1 and TAG2 and return non-nil if they are equivalent.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 Use `equal' on elements the name, class, and position.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 Use this function if tags are being copied and regrouped to test
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 for if two tags represent the same thing, but may be constructed
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 of different cons cells."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 (and (equal (semantic-tag-name tag1) (semantic-tag-name tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (semantic-tag-of-class-p tag1 (semantic-tag-class tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 (or (and (not (semantic-tag-overlay tag1))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 (not (semantic-tag-overlay tag2)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 (and (semantic-tag-overlay tag1)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 (semantic-tag-overlay tag2)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 (equal (semantic-tag-bounds tag1)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 (semantic-tag-bounds tag2))))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 (defun semantic-tag-similar-p (tag1 tag2 &rest ignorable-attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 "Test to see if TAG1 and TAG2 are similar.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 Two tags are similar if their name, datatype, and various attributes
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 are the same.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 Similar tags that have sub-tags such as arg lists or type members,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 are similar w/out checking the sub-list of tags.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 Optional argument IGNORABLE-ATTRIBUTES are attributes to ignore while comparing similarity."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 (let* ((A1 (and (equal (semantic-tag-name tag1) (semantic-tag-name tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 (semantic-tag-of-class-p tag1 (semantic-tag-class tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 (semantic-tag-of-type-p tag1 (semantic-tag-type tag2))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 (attr1 (semantic-tag-attributes tag1))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 (A2 (= (length attr1) (length (semantic-tag-attributes tag2))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 (A3 t)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 (when (and (not A2) ignorable-attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 (setq A2 t))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382 (while (and A2 attr1 A3)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 (let ((a (car attr1))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 (v (car (cdr attr1))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 (cond ((or (eq a :type) ;; already tested above.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 (memq a ignorable-attributes)) ;; Ignore them...
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 nil)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 ;; Don't test sublists of tags
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 ((and (listp v) (semantic-tag-p (car v)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 nil)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 ;; The attributes are not the same?
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 ((not (equal v (semantic-tag-get-attribute tag2 a)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 (setq A3 nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (t
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 (setq attr1 (cdr (cdr attr1))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 (and A1 A2 A3)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 ))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 (defun semantic-tag-similar-with-subtags-p (tag1 tag2 &rest ignorable-attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 "Test to see if TAG1 and TAG2 are similar.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 Uses `semantic-tag-similar-p' but also recurses through sub-tags, such
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 as argument lists and type members.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 Optional argument IGNORABLE-ATTRIBUTES is passed down to
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 `semantic-tag-similar-p'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 (let ((C1 (semantic-tag-components tag1))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412 (C2 (semantic-tag-components tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 (if (or (/= (length C1) (length C2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 (not (semantic-tag-similar-p tag1 tag2 ignorable-attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 ;; Basic test fails.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 ;; Else, check component lists.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420 (catch 'component-dissimilar
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 (while C1
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 (if (not (semantic-tag-similar-with-subtags-p
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
424 (car C1) (car C2) ignorable-attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 (throw 'component-dissimilar nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427 (setq C1 (cdr C1))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428 (setq C2 (cdr C2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
429 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 ;; If we made it this far, we are ok.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 t) )))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
434 (defun semantic-tag-of-type-p (tag type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
435 "Compare TAG's type against TYPE. Non nil if equivalent.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 TYPE can be a string, or a tag of class 'type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 This can be complex since some tags might have a :type that is a tag,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
438 while other tags might just have a string. This function will also be
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
439 return true of TAG's type is compared directly to the declaration of a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
440 data type."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
441 (let* ((tagtype (semantic-tag-type tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
442 (tagtypestring (cond ((stringp tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
443 tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
444 ((and (semantic-tag-p tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
445 (semantic-tag-of-class-p tagtype 'type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
446 (semantic-tag-name tagtype))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
447 (t "")))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
448 (typestring (cond ((stringp type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450 ((and (semantic-tag-p type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
451 (semantic-tag-of-class-p type 'type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
452 (semantic-tag-name type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
453 (t "")))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
454 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455 (and
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456 tagtypestring
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 (or
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
458 ;; Matching strings (input type is string)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
459 (and (stringp type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
460 (string= tagtypestring type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 ;; Matching strings (tag type is string)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462 (and (stringp tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 (string= tagtype typestring))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 ;; Matching tokens, and the type of the type is the same.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465 (and (string= tagtypestring typestring)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 (if (and (semantic-tag-type tagtype) (semantic-tag-type type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 (equal (semantic-tag-type tagtype) (semantic-tag-type type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468 t))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
469 ))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
470 ))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472 (defun semantic-tag-type-compound-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473 "Return non-nil the type of TAG is compound.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474 Compound implies a structure or similar data type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 Returns the list of tag members if it is compound."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
476 (let* ((tagtype (semantic-tag-type tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
477 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
478 (when (and (semantic-tag-p tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 (semantic-tag-of-class-p tagtype 'type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480 ;; We have the potential of this being a nifty compound type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481 (semantic-tag-type-members tagtype)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
482 )))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
483
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
484 (defun semantic-tag-faux-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 "Return non-nil if TAG is a FAUX tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486 FAUX tags are created to represent a construct that is
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487 not known to exist in the code.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
488
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489 Example: When the class browser sees methods to a class, but
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 cannot find the class, it will create a faux tag to represent the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 class to store those methods."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
492 (semantic--tag-get-property tag :faux-flag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
493
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
494 ;;; Tag creation
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
497 ;; Is this function still necessary?
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
498 (defun semantic-tag-make-plist (args)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
499 "Create a property list with ARGS.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
500 Args is a property list of the form (KEY1 VALUE1 ... KEYN VALUEN).
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
501 Where KEY is a symbol, and VALUE is the value for that symbol.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502 The return value will be a new property list, with these KEY/VALUE
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
503 pairs eliminated:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
505 - KEY associated to nil VALUE.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
506 - KEY associated to an empty string VALUE.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 - KEY associated to a zero VALUE."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
508 (let (plist key val)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509 (while args
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
510 (setq key (car args)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
511 val (nth 1 args)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
512 args (nthcdr 2 args))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
513 (or (member val '("" nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
514 (and (numberp val) (zerop val))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
515 (setq plist (cons key (cons val plist)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
516 ;; It is not useful to reverse the new plist.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
517 plist))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
518
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
519 (defsubst semantic-tag (name class &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
520 "Create a generic semantic tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
521 NAME is a string representing the name of this tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
522 CLASS is the symbol that represents the class of tag this is,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
523 such as 'variable, or 'function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
524 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 (list name class (semantic-tag-make-plist attributes) nil nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
526
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
527 (defsubst semantic-tag-new-variable (name type &optional default-value &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
528 "Create a semantic tag of class 'variable.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529 NAME is the name of this variable.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
530 TYPE is a string or semantic tag representing the type of this variable.
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
531 Optional DEFAULT-VALUE is a string representing the default value of this
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
532 variable. ATTRIBUTES is a list of additional attributes belonging to this
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
533 tag."
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 (apply 'semantic-tag name 'variable
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
535 :type type
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
536 :default-value default-value
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
537 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
538
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
539 (defsubst semantic-tag-new-function (name type arg-list &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
540 "Create a semantic tag of class 'function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
541 NAME is the name of this function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
542 TYPE is a string or semantic tag representing the type of this function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
543 ARG-LIST is a list of strings or semantic tags representing the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
544 arguments of this function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
545 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
546 (apply 'semantic-tag name 'function
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
547 :type type
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
548 :arguments arg-list
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
549 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
550
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
551 (defsubst semantic-tag-new-type (name type members parents &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
552 "Create a semantic tag of class 'type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
553 NAME is the name of this type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
554 TYPE is a string or semantic tag representing the type of this type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
555 MEMBERS is a list of strings or semantic tags representing the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
556 elements that make up this type if it is a composite type.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
557 PARENTS is a cons cell. (EXPLICIT-PARENTS . INTERFACE-PARENTS)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
558 EXPLICIT-PARENTS can be a single string (Just one parent) or a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
559 list of parents (in a multiple inheritance situation). It can also
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
560 be nil.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
561 INTERFACE-PARENTS is a list of strings representing the names of
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
562 all INTERFACES, or abstract classes inherited from. It can also be
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
563 nil.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
564 This slot can be interesting because the form:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
565 ( nil \"string\")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
566 is a valid parent where there is no explicit parent, and only an
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
567 interface.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
568 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
569 (apply 'semantic-tag name 'type
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
570 :type type
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
571 :members members
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
572 :superclasses (car parents)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
573 :interfaces (cdr parents)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
574 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
575
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
576 (defsubst semantic-tag-new-include (name system-flag &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
577 "Create a semantic tag of class 'include.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
578 NAME is the name of this include.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
579 SYSTEM-FLAG represents that we were able to identify this include as belonging
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
580 to the system, as opposed to belonging to the local project.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
581 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
582 (apply 'semantic-tag name 'include
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
583 :system-flag system-flag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
584 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
585
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
586 (defsubst semantic-tag-new-package (name detail &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
587 "Create a semantic tag of class 'package.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
588 NAME is the name of this package.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
589 DETAIL is extra information about this package, such as a location where
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
590 it can be found.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
591 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
592 (apply 'semantic-tag name 'package
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
593 :detail detail
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
594 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
595
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
596 (defsubst semantic-tag-new-code (name detail &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
597 "Create a semantic tag of class 'code.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
598 NAME is a name for this code.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
599 DETAIL is extra information about the code.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
600 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
601 (apply 'semantic-tag name 'code
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
602 :detail detail
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
603 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
604
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
605 (defsubst semantic-tag-set-faux (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
606 "Set TAG to be a new FAUX tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
607 FAUX tags represent constructs not found in the source code.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
608 You can identify a faux tag with `semantic-tag-faux-p'"
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
609 (semantic--tag-put-property tag :faux-flag t))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
610
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
611 (defsubst semantic-tag-set-name (tag name)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
612 "Set TAG name to NAME."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
613 (setcar tag name))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
614
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
615 ;;; Copying and cloning tags.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
616 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
617 (defsubst semantic-tag-clone (tag &optional name)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
618 "Clone TAG, creating a new TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
619 If optional argument NAME is not nil it specifies a new name for the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
620 cloned tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
621 ;; Right now, TAG is a list.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
622 (list (or name (semantic-tag-name tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
623 (semantic-tag-class tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
624 (copy-sequence (semantic-tag-attributes tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
625 (copy-sequence (semantic-tag-properties tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
626 (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
627
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
628 (defun semantic-tag-copy (tag &optional name keep-file)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
629 "Return a copy of TAG unlinked from the originating buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
630 If optional argument NAME is non-nil it specifies a new name for the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
631 copied tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
632 If optional argument KEEP-FILE is non-nil, and TAG was linked to a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
633 buffer, the originating buffer file name is kept in the `:filename'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
634 property of the copied tag.
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
635 If KEEP-FILE is a string, and the originating buffer is NOT available,
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
636 then KEEP-FILE is stored on the `:filename' property.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
637 This runs the tag hook `unlink-copy-hook`."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
638 ;; Right now, TAG is a list.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
639 (let ((copy (semantic-tag-clone tag name)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
640
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
641 ;; Keep the filename if needed.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
642 (when keep-file
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
643 (semantic--tag-put-property
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
644 copy :filename (or (semantic-tag-file-name copy)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
645 (and (stringp keep-file)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
646 keep-file)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
647 )))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
648
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
649 (when (semantic-tag-with-position-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
650 ;; Convert the overlay to a vector, effectively 'unlinking' the tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
651 (semantic--tag-set-overlay
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
652 copy (vector (semantic-tag-start copy) (semantic-tag-end copy)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
653
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
654 ;; Force the children to be copied also.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
655 ;;(let ((chil (semantic--tag-copy-list
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
656 ;; (semantic-tag-components-with-overlays tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
657 ;; keep-file)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
658 ;;;; Put the list into TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
659 ;;)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
660
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
661 ;; Call the unlink-copy hook. This should tell tools that
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
662 ;; this tag is not part of any buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
663 (when (semantic-overlay-p (semantic-tag-overlay tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
664 (semantic--tag-run-hooks copy 'unlink-copy-hook))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
665 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
666 copy))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
667
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
668 ;;(defun semantic--tag-copy-list (tags &optional keep-file)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
669 ;; "Make copies of TAGS and return the list of TAGS."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
670 ;; (let ((out nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
671 ;; (dolist (tag tags out)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
672 ;; (setq out (cons (semantic-tag-copy tag nil keep-file)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
673 ;; out))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
674 ;; )))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
675
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
676 (defun semantic--tag-copy-properties (tag1 tag2)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
677 "Copy private properties from TAG1 to TAG2.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
678 Return TAG2.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
679 This function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
680 (let ((plist (semantic-tag-properties tag1)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
681 (while plist
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
682 (semantic--tag-put-property tag2 (car plist) (nth 1 plist))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
683 (setq plist (nthcdr 2 plist)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
684 tag2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
685
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
686 ;;; DEEP COPIES
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
687 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
688 (defun semantic-tag-deep-copy-one-tag (tag &optional filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
689 "Make a deep copy of TAG, applying FILTER to each child-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
690 Properties and overlay info are not copied.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
691 FILTER takes TAG as an argument, and should returns a semantic-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
692 It is safe for FILTER to modify the input tag and return it."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
693 (when (not filter) (setq filter 'identity))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
694 (when (not (semantic-tag-p tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
695 (signal 'wrong-type-argument (list tag 'semantic-tag-p)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
696 (funcall filter (list (semantic-tag-name tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
697 (semantic-tag-class tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
698 (semantic--tag-deep-copy-attributes
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
699 (semantic-tag-attributes tag) filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
700 nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
701 nil)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
702
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
703 (defun semantic--tag-deep-copy-attributes (attrs &optional filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
704 "Make a deep copy of ATTRS, applying FILTER to each child-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
705
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
706 It is safe to modify ATTR, and return a permutation of that list.
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
707
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
708 FILTER takes TAG as an argument, and should returns a semantic-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
709 It is safe for FILTER to modify the input tag and return it."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
710 (when (car attrs)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
711 (when (not (symbolp (car attrs))) (error "Bad Attribute List in tag"))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
712 (cons (car attrs)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
713 (cons (semantic--tag-deep-copy-value (nth 1 attrs) filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
714 (semantic--tag-deep-copy-attributes (nthcdr 2 attrs) filter)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
715
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
716 (defun semantic--tag-deep-copy-value (value &optional filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
717 "Make a deep copy of VALUE, applying FILTER to each child-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
718
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
719 It is safe to modify VALUE, and return a permutation of that list.
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
720
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
721 FILTER takes TAG as an argument, and should returns a semantic-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
722 It is safe for FILTER to modify the input tag and return it."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
723 (cond
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
724 ;; Another tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
725 ((semantic-tag-p value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
726 (semantic-tag-deep-copy-one-tag value filter))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
727
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
728 ;; A list of more tags
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
729 ((and (listp value) (semantic-tag-p (car value)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
730 (semantic--tag-deep-copy-tag-list value filter))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
731
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
732 ;; Some arbitrary data.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
733 (t value)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
734
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
735 (defun semantic--tag-deep-copy-tag-list (tags &optional filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
736 "Make a deep copy of TAGS, applying FILTER to each child-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
737
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
738 It is safe to modify the TAGS list, and return a permutation of that list.
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
739
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
740 FILTER takes TAG as an argument, and should returns a semantic-tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
741 It is safe for FILTER to modify the input tag and return it."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
742 (when (car tags)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
743 (if (semantic-tag-p (car tags))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
744 (cons (semantic-tag-deep-copy-one-tag (car tags) filter)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
745 (semantic--tag-deep-copy-tag-list (cdr tags) filter))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
746 (cons (car tags) (semantic--tag-deep-copy-tag-list (cdr tags) filter)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
747
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
748
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
749 ;;; Standard Tag Access
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
750 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
751
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
752 ;;; Common
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
753 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
754 (defsubst semantic-tag-modifiers (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
755 "Return the value of the `:typemodifiers' attribute of TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
756 (semantic-tag-get-attribute tag :typemodifiers))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
757
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
758 (defun semantic-tag-docstring (tag &optional buffer)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
759 "Return the documentation of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
760 That is the value defined by the `:documentation' attribute.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
761 Optional argument BUFFER indicates where to get the text from.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
762 If not provided, then only the POSITION can be provided.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
763
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
764 If you want to get documentation for languages that do not store
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
765 the documentation string in the tag itself, use
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
766 `semantic-documentation-for-tag' instead."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
767 (let ((p (semantic-tag-get-attribute tag :documentation)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
768 (cond
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
769 ((stringp p) p) ;; it is the doc string.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
770
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
771 ((semantic-lex-token-with-text-p p)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
772 (semantic-lex-token-text p))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
773
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
774 ((and (semantic-lex-token-without-text-p p)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
775 buffer)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
776 (with-current-buffer buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
777 (semantic-lex-token-text (car (semantic-lex p (1+ p))))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
778
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
779 (t nil))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
780
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
781 ;;; Generic attributes for tags of any class.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
782 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
783 (defsubst semantic-tag-named-parent (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
784 "Return the parent of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
785 That is the value of the `:parent' attribute.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
786 If a definition can occur outside an actual parent structure, but
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
787 refers to that parent by name, then the :parent attribute should be used."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
788 (semantic-tag-get-attribute tag :parent))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
789
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
790 ;;; Tags of class `type'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
791
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
792 (defun semantic-tag-type-superclasses (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
793 "Return the list of superclass names of the type that TAG describes."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
794 (let ((supers (semantic-tag-get-attribute tag :superclasses)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
795 (cond ((stringp supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
796 ;; If we have a string, make it a list.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
797 (list supers))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
798 ((semantic-tag-p supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
799 ;; If we have one tag, return just the name.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
800 (list (semantic-tag-name supers)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
801 ((and (consp supers) (semantic-tag-p (car supers)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
802 ;; If we have a tag list, then return the names.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
803 (mapcar (lambda (s) (semantic-tag-name s))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
804 supers))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
805 ((consp supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
806 ;; A list of something, return it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
807 supers))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
808
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
809 (defun semantic--tag-find-parent-by-name (name supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
810 "Find the superclass NAME in the list of SUPERS.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
811 If a simple search doesn't do it, try splitting up the names
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
812 in SUPERS."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
813 (let ((stag nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
814 (setq stag (semantic-find-first-tag-by-name name supers))
104470
6ccad1511df1 Minor whitespace changes and `require' fixes.
Chong Yidong <cyd@stupidchicken.com>
parents: 104447
diff changeset
815
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
816 (when (not stag)
104418
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
817 (require 'semantic/analyze/fcn)
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
818 (dolist (S supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
819 (let* ((sname (semantic-tag-name S))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
820 (splitparts (semantic-analyze-split-name sname))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
821 (parts (if (stringp splitparts)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
822 (list splitparts)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
823 (nreverse splitparts))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
824 (when (string= name (car parts))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
825 (setq stag S))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
826 )))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
827
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
828 stag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
829
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
830 (defun semantic-tag-type-superclass-protection (tag parentstring)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
831 "Return the inheritance protection in TAG from PARENTSTRING.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
832 PARENTSTRING is the name of the parent being inherited.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
833 The return protection is a symbol, 'public, 'protection, and 'private."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
834 (let ((supers (semantic-tag-get-attribute tag :superclasses)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
835 (cond ((stringp supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
836 'public)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
837 ((semantic-tag-p supers)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
838 (let ((prot (semantic-tag-get-attribute supers :protection)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
839 (or (cdr (assoc prot '(("public" . public)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
840 ("protected" . protected)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
841 ("private" . private))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
842 'public)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
843 ((and (consp supers) (stringp (car supers)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
844 'public)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
845 ((and (consp supers) (semantic-tag-p (car supers)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
846 (let* ((stag (semantic--tag-find-parent-by-name parentstring supers))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
847 (prot (when stag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
848 (semantic-tag-get-attribute stag :protection))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
849 (or (cdr (assoc prot '(("public" . public)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
850 ("protected" . protected)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
851 ("private" . private))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
852 (when (equal prot "unspecified")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
853 (if (semantic-tag-of-type-p tag "class")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
854 'private
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
855 'public))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
856 'public))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
857 ))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
858
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
859 (defsubst semantic-tag-type-interfaces (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
860 "Return the list of interfaces of the type that TAG describes."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
861 ;; @todo - make this as robust as the above.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
862 (semantic-tag-get-attribute tag :interfaces))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
863
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
864 ;;; Tags of class `function'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
865 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
866 (defsubst semantic-tag-function-arguments (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
867 "Return the arguments of the function that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
868 That is the value of the `:arguments' attribute."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
869 (semantic-tag-get-attribute tag :arguments))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
870
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
871 (defsubst semantic-tag-function-throws (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
872 "Return the exceptions the function that TAG describes can throw.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
873 That is the value of the `:throws' attribute."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
874 (semantic-tag-get-attribute tag :throws))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
875
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
876 (defsubst semantic-tag-function-parent (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
877 "Return the parent of the function that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
878 That is the value of the `:parent' attribute.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
879 A function has a parent if it is a method of a class, and if the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
880 function does not appear in body of it's parent class."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
881 (semantic-tag-named-parent tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
882
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
883 (defsubst semantic-tag-function-destructor-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
884 "Return non-nil if TAG describes a destructor function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
885 That is the value of the `:destructor-flag' attribute."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
886 (semantic-tag-get-attribute tag :destructor-flag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
887
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
888 (defsubst semantic-tag-function-constructor-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
889 "Return non-nil if TAG describes a constructor function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
890 That is the value of the `:constructor-flag' attribute."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
891 (semantic-tag-get-attribute tag :constructor-flag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
892
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
893 ;;; Tags of class `variable'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
894 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
895 (defsubst semantic-tag-variable-default (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
896 "Return the default value of the variable that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
897 That is the value of the attribute `:default-value'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
898 (semantic-tag-get-attribute tag :default-value))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
899
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
900 (defsubst semantic-tag-variable-constant-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
901 "Return non-nil if the variable that TAG describes is a constant.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
902 That is the value of the attribute `:constant-flag'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
903 (semantic-tag-get-attribute tag :constant-flag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
904
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
905 ;;; Tags of class `include'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
906 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
907 (defsubst semantic-tag-include-system-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
908 "Return non-nil if the include that TAG describes is a system include.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
909 That is the value of the attribute `:system-flag'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
910 (semantic-tag-get-attribute tag :system-flag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
911
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
912 (define-overloadable-function semantic-tag-include-filename (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
913 "Return a filename representation of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
914 The default action is to return the `semantic-tag-name'.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
915 Some languages do not use full filenames in their include statements.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
916 Override this method to translate the code represenation
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
917 into a filename. (A relative filename if necessary.)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
918
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
919 See `semantic-dependency-tag-file' to expand an include
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
920 tag to a full file name.")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
921
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
922 (defun semantic-tag-include-filename-default (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
923 "Return a filename representation of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
924 Returns `semantic-tag-name'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
925 (semantic-tag-name tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
926
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
927 ;;; Tags of class `code'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
928 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
929 (defsubst semantic-tag-code-detail (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
930 "Return detail information from code that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
931 That is the value of the attribute `:detail'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
932 (semantic-tag-get-attribute tag :detail))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
933
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
934 ;;; Tags of class `alias'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
935 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
936 (defsubst semantic-tag-new-alias (name meta-tag-class value &rest attributes)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
937 "Create a semantic tag of class alias.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
938 NAME is a name for this alias.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
939 META-TAG-CLASS is the class of the tag this tag is an alias.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
940 VALUE is the aliased definition.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
941 ATTRIBUTES is a list of additional attributes belonging to this tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
942 (apply 'semantic-tag name 'alias
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
943 :aliasclass meta-tag-class
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
944 :definition value
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
945 attributes))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
946
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
947 (defsubst semantic-tag-alias-class (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
948 "Return the class of tag TAG is an alias."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
949 (semantic-tag-get-attribute tag :aliasclass))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
950
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
951 (define-overloadable-function semantic-tag-alias-definition (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
952 "Return the definition TAG is an alias.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
953 The returned value is a tag of the class that
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
954 `semantic-tag-alias-class' returns for TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
955 The default is to return the value of the :definition attribute.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
956 Return nil if TAG is not of class 'alias."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
957 (when (semantic-tag-of-class-p tag 'alias)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
958 (:override
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
959 (semantic-tag-get-attribute tag :definition))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
960
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
961 ;;; Language Specific Tag access via overload
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
962 ;;
104446
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104444
diff changeset
963 ;;;###autoload
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
964 (define-overloadable-function semantic-tag-components (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
965 "Return a list of components for TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
966 A Component is a part of TAG which itself may be a TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
967 Examples include the elements of a structure in a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
968 tag of class `type, or the list of arguments to a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
969 tag of class 'function."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
970 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
971
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
972 (defun semantic-tag-components-default (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
973 "Return a list of components for TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
974 Perform the described task in `semantic-tag-components'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
975 (cond ((semantic-tag-of-class-p tag 'type)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
976 (semantic-tag-type-members tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
977 ((semantic-tag-of-class-p tag 'function)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
978 (semantic-tag-function-arguments tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
979 (t nil)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
980
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
981 (define-overloadable-function semantic-tag-components-with-overlays (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
982 "Return the list of top level components belonging to TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
983 Children are any sub-tags which contain overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
984
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
985 Default behavior is to get `semantic-tag-components' in addition
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
986 to the components of an anonymous types (if applicable.)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
987
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
988 Note for language authors:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
989 If a mode defines a language tag that has tags in it with overlays
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
990 you should still return them with this function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
991 Ignoring this step will prevent several features from working correctly."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
992 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
993
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
994 (defun semantic-tag-components-with-overlays-default (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
995 "Return the list of top level components belonging to TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
996 Children are any sub-tags which contain overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
997 The default action collects regular components of TAG, in addition
105340
118ad0cdd9a8 Doc/message fixes.
Glenn Morris <rgm@gnu.org>
parents: 105260
diff changeset
998 to any components belonging to an anonymous type."
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
999 (let ((explicit-children (semantic-tag-components tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1000 (type (semantic-tag-type tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1001 (anon-type-children nil)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1002 (all-children nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1003 ;; Identify if this tag has an anonymous structure as
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1004 ;; its type. This implies it may have children with overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1005 (when (and type (semantic-tag-p type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1006 (setq anon-type-children (semantic-tag-components type))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1007 ;; Add anonymous children
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1008 (while anon-type-children
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1009 (when (semantic-tag-with-position-p (car anon-type-children))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1010 (setq all-children (cons (car anon-type-children) all-children)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1011 (setq anon-type-children (cdr anon-type-children))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1012 ;; Add explicit children
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1013 (while explicit-children
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1014 (when (semantic-tag-with-position-p (car explicit-children))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1015 (setq all-children (cons (car explicit-children) all-children)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1016 (setq explicit-children (cdr explicit-children)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1017 ;; Return
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1018 (nreverse all-children)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1019
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1020 (defun semantic-tag-children-compatibility (tag &optional positiononly)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1021 "Return children of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1022 If POSITIONONLY is nil, use `semantic-tag-components'.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1023 If POSITIONONLY is non-nil, use `semantic-tag-components-with-overlays'.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1024 DO NOT use this fcn in new code. Use one of the above instead."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1025 (if positiononly
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1026 (semantic-tag-components-with-overlays tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1027 (semantic-tag-components tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1028
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1029 ;;; Tag Region
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1030 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1031 ;; A Tag represents a region in a buffer. You can narrow to that tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1032 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1033 (defun semantic-narrow-to-tag (&optional tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1034 "Narrow to the region specified by the bounds of TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1035 See `semantic-tag-bounds'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1036 (interactive)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1037 (if (not tag) (setq tag (semantic-current-tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1038 (narrow-to-region (semantic-tag-start tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1039 (semantic-tag-end tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1040
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1041 (defmacro semantic-with-buffer-narrowed-to-current-tag (&rest body)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1042 "Execute BODY with the buffer narrowed to the current tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1043 `(save-restriction
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1044 (semantic-narrow-to-tag (semantic-current-tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1045 ,@body))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1046 (put 'semantic-with-buffer-narrowed-to-current-tag 'lisp-indent-function 0)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1047 (add-hook 'edebug-setup-hook
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1048 (lambda ()
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1049 (def-edebug-spec semantic-with-buffer-narrowed-to-current-tag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1050 (def-body))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1051
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1052 (defmacro semantic-with-buffer-narrowed-to-tag (tag &rest body)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1053 "Narrow to TAG, and execute BODY."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1054 `(save-restriction
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1055 (semantic-narrow-to-tag ,tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1056 ,@body))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1057 (put 'semantic-with-buffer-narrowed-to-tag 'lisp-indent-function 1)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1058 (add-hook 'edebug-setup-hook
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1059 (lambda ()
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1060 (def-edebug-spec semantic-with-buffer-narrowed-to-tag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1061 (def-body))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1062
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1063 ;;; Tag Hooks
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1064 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1065 ;; Semantic may want to provide special hooks when specific operations
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1066 ;; are about to happen on a given tag. These routines allow for hook
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1067 ;; maintenance on a tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1068
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1069 ;; Internal global variable used to manage tag hooks. For example,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1070 ;; some implementation of `remove-hook' checks that the hook variable
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1071 ;; is `default-boundp'.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1072 (defvar semantic--tag-hook-value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1073
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1074 (defun semantic-tag-add-hook (tag hook function &optional append)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1075 "Onto TAG, add to the value of HOOK the function FUNCTION.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1076 FUNCTION is added (if necessary) at the beginning of the hook list
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1077 unless the optional argument APPEND is non-nil, in which case
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1078 FUNCTION is added at the end.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1079 HOOK should be a symbol, and FUNCTION may be any valid function.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1080 See also the function `add-hook'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1081 (let ((semantic--tag-hook-value (semantic--tag-get-property tag hook)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1082 (add-hook 'semantic--tag-hook-value function append)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1083 (semantic--tag-put-property tag hook semantic--tag-hook-value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1084 semantic--tag-hook-value))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1085
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1086 (defun semantic-tag-remove-hook (tag hook function)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1087 "Onto TAG, remove from the value of HOOK the function FUNCTION.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1088 HOOK should be a symbol, and FUNCTION may be any valid function. If
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1089 FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1090 the list of hooks to run in HOOK, then nothing is done.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1091 See also the function `remove-hook'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1092 (let ((semantic--tag-hook-value (semantic--tag-get-property tag hook)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1093 (remove-hook 'semantic--tag-hook-value function)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1094 (semantic--tag-put-property tag hook semantic--tag-hook-value)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1095 semantic--tag-hook-value))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1096
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1097 (defun semantic--tag-run-hooks (tag hook &rest args)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1098 "Run for TAG all expressions saved on the property HOOK.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1099 Each hook expression must take at least one argument, the TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1100 For any given situation, additional ARGS may be passed."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1101 (let ((semantic--tag-hook-value (semantic--tag-get-property tag hook))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1102 (arglist (cons tag args)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1103 (condition-case err
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1104 ;; If a hook bombs, ignore it! Usually this is tied into
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1105 ;; some sort of critical system.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1106 (apply 'run-hook-with-args 'semantic--tag-hook-value arglist)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1107 (error (message "Error: %S" err)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1108
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1109 ;;; Tags and Overlays
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1110 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1111 ;; Overlays are used so that we can quickly identify tags from
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1112 ;; buffer positions and regions using built in Emacs commands.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1113 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1114 (defsubst semantic--tag-unlink-list-from-buffer (tags)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1115 "Convert TAGS from using an overlay to using an overlay proxy.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1116 This function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1117 (mapcar 'semantic--tag-unlink-from-buffer tags))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1118
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1119 (defun semantic--tag-unlink-from-buffer (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1120 "Convert TAG from using an overlay to using an overlay proxy.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1121 This function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1122 (when (semantic-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1123 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1124 (when (semantic-overlay-p o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1125 (semantic--tag-set-overlay
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1126 tag (vector (semantic-overlay-start o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1127 (semantic-overlay-end o)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1128 (semantic-overlay-delete o))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1129 ;; Look for a link hook on TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1130 (semantic--tag-run-hooks tag 'unlink-hook)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1131 ;; Fix the sub-tags which contain overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1132 (semantic--tag-unlink-list-from-buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1133 (semantic-tag-components-with-overlays tag)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1134
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1135 (defsubst semantic--tag-link-list-to-buffer (tags)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1136 "Convert TAGS from using an overlay proxy to using an overlay.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1137 This function is for internal use only."
105805
d29fa94d860d (semantic--tag-link-list-to-buffer): Use mapc rather than mapcar
Glenn Morris <rgm@gnu.org>
parents: 105760
diff changeset
1138 (mapc 'semantic--tag-link-to-buffer tags))
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1139
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1140 (defun semantic--tag-link-to-buffer (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1141 "Convert TAG from using an overlay proxy to using an overlay.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1142 This function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1143 (when (semantic-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1144 (let ((o (semantic-tag-overlay tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1145 (when (and (vectorp o) (= (length o) 2))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1146 (setq o (semantic-make-overlay (aref o 0) (aref o 1)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1147 (current-buffer)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1148 (semantic--tag-set-overlay tag o)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1149 (semantic-overlay-put o 'semantic tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1150 ;; Clear the :filename property
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1151 (semantic--tag-put-property tag :filename nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1152 ;; Look for a link hook on TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1153 (semantic--tag-run-hooks tag 'link-hook)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1154 ;; Fix the sub-tags which contain overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1155 (semantic--tag-link-list-to-buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1156 (semantic-tag-components-with-overlays tag)))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1157
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1158 (defun semantic--tag-unlink-cache-from-buffer ()
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1159 "Convert all tags in the current cache to use overlay proxys.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1160 This function is for internal use only."
104418
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
1161 (require 'semantic)
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1162 (semantic--tag-unlink-list-from-buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1163 ;; @todo- use fetch-tags-fast?
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1164 (semantic-fetch-tags)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1165
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1166 (defvar semantic--buffer-cache)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1167
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1168 (defun semantic--tag-link-cache-to-buffer ()
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1169 "Convert all tags in the current cache to use overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1170 This function is for internal use only."
104418
12884dc43872 * cedet/semantic/tag.el: Add declare-function statements for
Chong Yidong <cyd@stupidchicken.com>
parents: 104416
diff changeset
1171 (require 'semantic)
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1172 (condition-case nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1173 ;; In this unique case, we cannot call the usual toplevel fn.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1174 ;; because we don't want a reparse, we want the old overlays.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1175 (semantic--tag-link-list-to-buffer
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1176 semantic--buffer-cache)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1177 ;; Recover when there is an error restoring the cache.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1178 (error (message "Error recovering tag list")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1179 (semantic-clear-toplevel-cache)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1180 nil)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1181
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1182 ;;; Tag Cooking
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1183 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1184 ;; Raw tags from a parser follow a different positional format than
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1185 ;; those used in the buffer cache. Raw tags need to be cooked into
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1186 ;; semantic cache friendly tags for use by the masses.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1187 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1188 (defsubst semantic--tag-expanded-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1189 "Return non-nil if TAG is expanded.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1190 This function is for internal use only.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1191 See also the function `semantic--expand-tag'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1192 ;; In fact a cooked tag is actually a list of cooked tags
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1193 ;; because a raw tag can be expanded in several cooked ones!
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1194 (when (consp tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1195 (while (and (semantic-tag-p (car tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1196 (vectorp (semantic-tag-overlay (car tag))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1197 (setq tag (cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1198 (null tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1199
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1200 (defvar semantic-tag-expand-function nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1201 "Function used to expand a tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1202 It is passed each tag production, and must return a list of tags
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1203 derived from it, or nil if it does not need to be expanded.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1204
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1205 Languages with compound definitions should use this function to expand
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1206 from one compound symbol into several. For example, in C or Java the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1207 following definition is easily parsed into one tag:
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1208
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1209 int a, b;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1210
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1211 This function should take this compound tag and turn it into two tags,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1212 one for A, and the other for B.")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1213 (make-variable-buffer-local 'semantic-tag-expand-function)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1214
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1215 (defun semantic--tag-expand (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1216 "Convert TAG from a raw state to a cooked state, and expand it.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1217 Returns a list of cooked tags.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1218
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1219 The parser returns raw tags with positional data START END at the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1220 end of the tag data structure (a list for now). We convert it from
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1221 that to a cooked state that uses an overlay proxy, that is, a vector
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1222 \[START END].
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1223
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1224 The raw tag is changed with side effects and maybe expanded in
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1225 several derived tags when the variable `semantic-tag-expand-function'
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1226 is set.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1227
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1228 This function is for internal use only."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1229 (if (semantic--tag-expanded-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1230 ;; Just return TAG if it is already expanded (by a grammar
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1231 ;; semantic action), or if it isn't recognized as a valid
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1232 ;; semantic tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1233 tag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1234
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1235 ;; Try to cook the tag. This code will be removed when tag will
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1236 ;; be directly created with the right format.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1237 (condition-case nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1238 (let ((ocdr (semantic--tag-overlay-cdr tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1239 ;; OCDR contains the sub-list of TAG whose car is the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1240 ;; OVERLAY part of TAG. That is, a list (OVERLAY START END).
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1241 ;; Convert it into an overlay proxy ([START END]).
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1242 (semantic--tag-set-overlay
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1243 tag (vector (nth 1 ocdr) (nth 2 ocdr)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1244 ;; Remove START END positions at end of tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1245 (setcdr ocdr nil)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1246 ;; At this point (length TAG) must be 5!
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1247 ;;(unless (= (length tag) 5)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1248 ;; (error "Tag expansion failed"))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1249 )
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1250 (error
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1251 (message "A Rule must return a single tag-line list!")
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1252 (debug tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1253 nil))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1254 ;; Expand based on local configuration
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1255 (if semantic-tag-expand-function
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1256 (or (funcall semantic-tag-expand-function tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1257 (list tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1258 (list tag))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1259
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1260 ;; Foreign tags
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1261 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1262 (defmacro semantic-foreign-tag-invalid (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1263 "Signal that TAG is an invalid foreign tag."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1264 `(signal 'wrong-type-argument '(semantic-foreign-tag-p ,tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1265
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1266 (defsubst semantic-foreign-tag-p (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1267 "Return non-nil if TAG is a foreign tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1268 That is, a tag unlinked from the originating buffer, which carries the
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1269 originating buffer file name, and major mode."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1270 (and (semantic-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1271 (semantic--tag-get-property tag :foreign-flag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1272
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1273 (defsubst semantic-foreign-tag-check (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1274 "Check that TAG is a valid foreign tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1275 Signal an error if not."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1276 (or (semantic-foreign-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1277 (semantic-foreign-tag-invalid tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1278
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1279 (defun semantic-foreign-tag (&optional tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1280 "Return a copy of TAG as a foreign tag, or nil if it can't be done.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1281 TAG defaults to the tag at point in current buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1282 See also `semantic-foreign-tag-p'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1283 (or tag (setq tag (semantic-current-tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1284 (when (semantic-tag-p tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1285 (let ((ftag (semantic-tag-copy tag nil t))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1286 ;; Do extra work for the doc strings, since this is a
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1287 ;; common use case.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1288 (doc (condition-case nil
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1289 (semantic-documentation-for-tag tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1290 (error nil))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1291 ;; A foreign tag must carry its originating buffer file name!
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1292 (when (semantic--tag-get-property ftag :filename)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1293 (semantic--tag-put-property ftag :mode (semantic-tag-mode tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1294 (semantic--tag-put-property ftag :documentation doc)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1295 (semantic--tag-put-property ftag :foreign-flag t)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1296 ftag))))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1297
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1298 ;; High level obtain/insert foreign tag overloads
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1299 (define-overloadable-function semantic-obtain-foreign-tag (&optional tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1300 "Obtain a foreign tag from TAG.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1301 TAG defaults to the tag at point in current buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1302 Return the obtained foreign tag or nil if failed."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1303 (semantic-foreign-tag tag))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1304
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1305 (defun semantic-insert-foreign-tag-default (foreign-tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1306 "Insert FOREIGN-TAG into the current buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1307 The default behavior assumes the current buffer is a language file,
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1308 and attempts to insert a prototype/function call."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1309 ;; Long term goal: Have a mechanism for a tempo-like template insert
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1310 ;; for the given tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1311 (insert (semantic-format-tag-prototype foreign-tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1312
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1313 (define-overloadable-function semantic-insert-foreign-tag (foreign-tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1314 "Insert FOREIGN-TAG into the current buffer.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1315 Signal an error if FOREIGN-TAG is not a valid foreign tag.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1316 This function is overridable with the symbol `insert-foreign-tag'."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1317 (semantic-foreign-tag-check foreign-tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1318 (:override)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1319 (message (semantic-format-tag-summarize foreign-tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1320
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1321 ;;; Support log modes here
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1322 (define-mode-local-override semantic-insert-foreign-tag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1323 log-edit-mode (foreign-tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1324 "Insert foreign tags into log-edit mode."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1325 (insert (concat "(" (semantic-format-tag-name foreign-tag) "): ")))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1326
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1327 (define-mode-local-override semantic-insert-foreign-tag
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1328 change-log-mode (foreign-tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1329 "Insert foreign tags into log-edit mode."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1330 (insert (concat "(" (semantic-format-tag-name foreign-tag) "): ")))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1331
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1332 ;;; Compatibility
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1333 ;;
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1334 (defconst semantic-token-version
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1335 semantic-tag-version)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1336 (defconst semantic-token-incompatible-version
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1337 semantic-tag-incompatible-version)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1338
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1339 (defsubst semantic-token-type-parent (tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1340 "Return the parent of the type that TAG describes.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1341 The return value is a list. A value of nil means no parents.
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1342 The `car' of the list is either the parent class, or a list
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1343 of parent classes. The `cdr' of the list is the list of
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1344 interfaces, or abstract classes which are parents of TAG."
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1345 (cons (semantic-tag-get-attribute tag :superclasses)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1346 (semantic-tag-type-interfaces tag)))
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1347 (make-obsolete 'semantic-token-type-parent
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1348 "\
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1349 use `semantic-tag-type-superclass' \
105750
a81c63f1a19f * cedet/semantic/util.el (semantic-recursive-find-nonterminal-by-name):
Chong Yidong <cyd@stupidchicken.com>
parents: 105377
diff changeset
1350 and `semantic-tag-type-interfaces' instead" "23.2")
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1351
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1352 (semantic-alias-obsolete 'semantic-tag-make-assoc-list
105760
d0906291f75b * cedet/semantic/fw.el (semantic-alias-obsolete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105750
diff changeset
1353 'semantic-tag-make-plist "23.2")
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1354
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1355 (semantic-varalias-obsolete 'semantic-expand-nonterminal
105760
d0906291f75b * cedet/semantic/fw.el (semantic-alias-obsolete)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105750
diff changeset
1356 'semantic-tag-expand-function "23.2")
104412
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1357
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1358 (provide 'semantic/tag)
05443eb58935 cedet/semantic.el: Change requires to use semantic/FOO format.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1359
104446
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104444
diff changeset
1360 ;; Local variables:
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104444
diff changeset
1361 ;; generated-autoload-file: "loaddefs.el"
104447
273e528a9f9b * emacs-lisp/autoload.el (generated-autoload-load-name): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 104446
diff changeset
1362 ;; generated-autoload-load-name: "semantic/tag"
104446
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104444
diff changeset
1363 ;; End:
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104444
diff changeset
1364
105377
7f4c7f5c0eba Add arch tagline
Miles Bader <miles@gnu.org>
parents: 105340
diff changeset
1365 ;; arch-tag: f7813634-c4f0-4817-a487-cbaa84333353
104447
273e528a9f9b * emacs-lisp/autoload.el (generated-autoload-load-name): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 104446
diff changeset
1366 ;;; semantic/tag.el ends here