118 examine_symbol(sym);
119 } END_FOR_EACH_PTR(sym);
120 }
121
122 static void examine_symbol(struct symbol *sym)
123 {
124 struct symbol *base = sym;
125
126 if (!sym || sym->visited)
127 return;
128 if (sym->ident && sym->ident->reserved)
129 return;
130 if (sym->type == SYM_KEYWORD || sym->type == SYM_PREPROCESSOR)
131 return;
132
133 add_tag(sym);
134 base = sym->ctype.base_type;
135
136 switch (sym->type) {
137 case SYM_NODE:
138 if (base->type == SYM_FN)
139 sym->kind = 'f';
140 examine_symbol(base);
141 break;
142 case SYM_STRUCT:
143 sym->kind = 's';
144 examine_members(sym->symbol_list);
145 break;
146 case SYM_UNION:
147 sym->kind = 'u';
148 examine_members(sym->symbol_list);
149 break;
150 case SYM_ENUM:
151 sym->kind = 'e';
152 case SYM_PTR:
153 case SYM_TYPEOF:
154 case SYM_BITFIELD:
155 case SYM_FN:
156 case SYM_ARRAY:
157 examine_symbol(sym->ctype.base_type);
158 break;
199 add_tag(sym);
200 }
201
202 static inline void examine_symbol_list(struct symbol_list *list)
203 {
204 struct symbol *sym;
205
206 if (!list)
207 return;
208 FOR_EACH_PTR(list, sym) {
209 examine_namespace(sym);
210 } END_FOR_EACH_PTR(sym);
211 }
212
213 int main(int argc, char **argv)
214 {
215 struct string_list *filelist = NULL;
216 char *file;
217
218 examine_symbol_list(sparse_initialize(argc, argv, &filelist));
219 FOR_EACH_PTR_NOTAG(filelist, file) {
220 sparse(file);
221 examine_symbol_list(file_scope->symbols);
222 } END_FOR_EACH_PTR_NOTAG(file);
223 examine_symbol_list(global_scope->symbols);
224 sort_list((struct ptr_list **)&taglist, cmp_sym);
225 show_tags(taglist);
226 return 0;
227 }
|
118 examine_symbol(sym);
119 } END_FOR_EACH_PTR(sym);
120 }
121
122 static void examine_symbol(struct symbol *sym)
123 {
124 struct symbol *base = sym;
125
126 if (!sym || sym->visited)
127 return;
128 if (sym->ident && sym->ident->reserved)
129 return;
130 if (sym->type == SYM_KEYWORD || sym->type == SYM_PREPROCESSOR)
131 return;
132
133 add_tag(sym);
134 base = sym->ctype.base_type;
135
136 switch (sym->type) {
137 case SYM_NODE:
138 if (base && base->type == SYM_FN)
139 sym->kind = 'f';
140 examine_symbol(base);
141 break;
142 case SYM_STRUCT:
143 sym->kind = 's';
144 examine_members(sym->symbol_list);
145 break;
146 case SYM_UNION:
147 sym->kind = 'u';
148 examine_members(sym->symbol_list);
149 break;
150 case SYM_ENUM:
151 sym->kind = 'e';
152 case SYM_PTR:
153 case SYM_TYPEOF:
154 case SYM_BITFIELD:
155 case SYM_FN:
156 case SYM_ARRAY:
157 examine_symbol(sym->ctype.base_type);
158 break;
199 add_tag(sym);
200 }
201
202 static inline void examine_symbol_list(struct symbol_list *list)
203 {
204 struct symbol *sym;
205
206 if (!list)
207 return;
208 FOR_EACH_PTR(list, sym) {
209 examine_namespace(sym);
210 } END_FOR_EACH_PTR(sym);
211 }
212
213 int main(int argc, char **argv)
214 {
215 struct string_list *filelist = NULL;
216 char *file;
217
218 examine_symbol_list(sparse_initialize(argc, argv, &filelist));
219 FOR_EACH_PTR(filelist, file) {
220 sparse(file);
221 examine_symbol_list(file_scope->symbols);
222 } END_FOR_EACH_PTR(file);
223 examine_symbol_list(global_scope->symbols);
224 sort_list((struct ptr_list **)&taglist, cmp_sym);
225 show_tags(taglist);
226 return 0;
227 }
|