Print this page
new smatch


 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 }