I found it very useful for debug_symbol to show the builtin
type name.

Signed-off-by: Christopher Li<[EMAIL PROTECTED]>

Index: sparse/symbol.h
===================================================================
--- sparse.orig/symbol.h        2006-12-14 20:26:32.000000000 -0800
+++ sparse/symbol.h     2006-12-14 20:28:01.000000000 -0800
@@ -239,6 +239,8 @@ extern void bind_symbol(struct symbol *,
 extern struct symbol *examine_symbol_type(struct symbol *);
 extern void examine_simple_symbol_type(struct symbol *);
 extern const char *show_typename(struct symbol *sym);
+extern const char* builtin_typename(struct symbol *sym);
+extern const char* builtin_ctypename(struct ctype *ctype);
 
 extern void debug_symbol(struct symbol *);
 extern void merge_type(struct symbol *sym, struct symbol *base_type);
Index: sparse/show-parse.c
===================================================================
--- sparse.orig/show-parse.c    2006-12-14 20:26:32.000000000 -0800
+++ sparse/show-parse.c 2006-12-14 20:28:01.000000000 -0800
@@ -56,11 +56,12 @@ static void do_debug_symbol(struct symbo
 
        if (!sym)
                return;
-       fprintf(stderr, "%.*s%s%3d:%lu %lx %s (as: %d) %p (%s:%d:%d)\n",
+       fprintf(stderr, "%.*s%s%3d:%lu %s %s (as: %d) %p (%s:%d:%d) %s\n",
                indent, indent_string, typestr[sym->type],
                sym->bit_size, sym->ctype.alignment,
-               sym->ctype.modifiers, show_ident(sym->ident), sym->ctype.as,
-               sym, stream_name(sym->pos.stream), sym->pos.line, sym->pos.pos);
+               modifier_string(sym->ctype.modifiers), show_ident(sym->ident), 
sym->ctype.as,
+               sym, stream_name(sym->pos.stream), sym->pos.line, sym->pos.pos,
+               builtin_typename(sym) ?: "");
        i = 0;
        FOR_EACH_PTR(sym->ctype.contexts, context) {
                /* FIXME: should print context expression */
@@ -98,7 +99,7 @@ const char *modifier_string(unsigned lon
        const char *res,**ptr, *names[] = {
                "auto", "register", "static", "extern",
                "const", "volatile", "[signed]", "[unsigned]",
-               "[char]", "[short]", "[long]", "[long]",
+               "[char]", "[short]", "[long]", "[long long]",
                "[typdef]", "[structof]", "[unionof]", "[enum]",
                "[typeof]", "[attribute]", "inline", "[addressable]",
                "[nocast]", "[noderef]", "[accessed]", "[toplevel]",
@@ -171,53 +172,74 @@ static void append(struct type_name *nam
        name->end += n;
 }
 
+static struct ctype_name {
+       struct symbol *sym;
+       const char *name;
+} typenames[] = {
+       { & char_ctype,  "char" },
+       { &schar_ctype,  "signed char" },
+       { &uchar_ctype,  "unsigned char" },
+       { & short_ctype, "short" },
+       { &sshort_ctype, "signed short" },
+       { &ushort_ctype, "unsigned short" },
+       { & int_ctype,   "int" },
+       { &sint_ctype,   "signed int" },
+       { &uint_ctype,   "unsigned int" },
+       { &slong_ctype,  "signed long" },
+       { & long_ctype,  "long" },
+       { &ulong_ctype,  "unsigned long" },
+       { & llong_ctype, "long long" },
+       { &sllong_ctype, "signed long long" },
+       { &ullong_ctype, "unsigned long long" },
+
+       { &void_ctype,   "void" },
+       { &bool_ctype,   "bool" },
+       { &string_ctype, "string" },
+
+       { &float_ctype,  "float" },
+       { &double_ctype, "double" },
+       { &ldouble_ctype,"long double" },
+       { &incomplete_ctype, "incomplete type" },
+       { &int_type, "abstract int" },
+       { &fp_type, "abstract fp" },
+       { &label_ctype, "label type" },
+       { &bad_ctype, "bad type" },
+};
+
+const char* builtin_typename(struct symbol *sym)
+{
+       int i;
+
+       for (i = 0; i < sizeof(typenames)/sizeof(typenames[0]); i++)
+               if (typenames[i].sym == sym)
+                       return typenames[i].name;
+       return NULL;
+}
+
+const char* builtin_ctypename(struct ctype *ctype)
+{
+       int i;
+
+       for (i = 0; i < sizeof(typenames)/sizeof(typenames[0]); i++)
+               if (&typenames[i].sym->ctype == ctype)
+                       return typenames[i].name;
+       return NULL;
+}
+
 static void do_show_type(struct symbol *sym, struct type_name *name)
 {
-       int i, modlen;
+       int modlen;
        const char *mod;
-       static struct ctype_name {
-               struct symbol *sym;
-               const char *name;
-       } typenames[] = {
-               { & char_ctype,  "char" },
-               { &schar_ctype,  "signed char" },
-               { &uchar_ctype,  "unsigned char" },
-               { & short_ctype, "short" },
-               { &sshort_ctype, "signed short" },
-               { &ushort_ctype, "unsigned short" },
-               { & int_ctype,   "int" },
-               { &sint_ctype,   "signed int" },
-               { &uint_ctype,   "unsigned int" },
-               { &slong_ctype,  "signed long" },
-               { & long_ctype,  "long" },
-               { &ulong_ctype,  "unsigned long" },
-               { & llong_ctype, "long long" },
-               { &sllong_ctype, "signed long long" },
-               { &ullong_ctype, "unsigned long long" },
-
-               { &void_ctype,   "void" },
-               { &bool_ctype,   "bool" },
-               { &string_ctype, "string" },
-
-               { &float_ctype,  "float" },
-               { &double_ctype, "double" },
-               { &ldouble_ctype,"long double" },
-               { &incomplete_ctype, "incomplete type" },
-               { &label_ctype, "label type" },
-               { &bad_ctype, "bad type" },
-       };
-
+       const char *typename;
        if (!sym)
                return;
 
-       for (i = 0; i < sizeof(typenames)/sizeof(typenames[0]); i++) {
-               if (typenames[i].sym == sym) {
-                       int len = strlen(typenames[i].name);
-                       *--name->start = ' ';
-                       name->start -= len;
-                       memcpy(name->start, typenames[i].name, len);
-                       return;
-               }
+       if ((typename = builtin_typename(sym))) {
+               int len = strlen(typename);
+               *--name->start = ' ';
+               name->start -= len;
+               memcpy(name->start, typename, len);
+               return;
        }
 
        /* Prepend */
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to