Changeset 7

Show
Ignore:
Timestamp:
04/03/05 19:36:24 (4 years ago)
Author:
teqdruid
Message:

Copied original files over.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/gdb/c-lang.c

    r5 r7  
    697697 
    698698const struct language_defn minimal_language_defn = 
    699  { 
    700    "minimal",           /* Language name */ 
    701    language_minimal, 
    702    NULL, 
    703    range_check_off, 
    704    type_check_off, 
    705    case_sensitive_on, 
    706    array_row_major, 
    707    &exp_descriptor_standard, 
    708    c_preprocess_and_parse, 
    709    c_error, 
    710    null_post_parser, 
    711    c_printchar,         /* Print a character constant */ 
    712    c_printstr,          /* Function to print string constant */ 
    713    c_emit_char,         /* Print a single char */ 
    714    c_create_fundamental_type,   /* Create fundamental type in this language */ 
    715    c_print_type,            /* Print a type using appropriate syntax */ 
    716    c_val_print,         /* Print a value using appropriate syntax */ 
    717    c_value_print,       /* Print a top-level value */ 
    718    NULL,                /* Language specific skip_trampoline */ 
    719    NULL,                /* value_of_this */ 
    720   basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ 
    721   basic_lookup_transparent_type,/* lookup_transparent_type */ 
    722   NULL,             /* Language specific symbol demangler */ 
    723   NULL,             /* Language specific class_name_from_physname */ 
    724   c_op_print_tab,       /* expression operators for printing */ 
    725   1,                /* c-style arrays */ 
    726   0,                /* String lower bound */ 
    727   NULL, 
    728   default_word_break_characters, 
    729   c_language_arch_info, 
    730   LANG_MAGIC 
    731 }; 
    732  
    733  
    734 /***************************** 
    735  D Language stuff 
    736 ******************************/ 
    737 #include <string.h> 
    738 #include <ctype.h> 
    739  
    740 static int extractidentifiers(char** output, char** mangled) { 
    741   int i = -1; 
    742   while (isdigit(**mangled)) { 
    743     i = strtol(*mangled, mangled, 10); 
    744     if (strlen(*mangled) < i) 
    745       return -1; 
    746     memcpy(*output, *mangled, i); 
    747     *mangled += i; 
    748     *output += i + 1; 
    749     (*output)[-1] = '.'; 
    750   } 
    751   if (**mangled == '\0' || i == -1) 
    752     return -1; 
    753   (*output)--; 
    754   return 1; 
    755 
    756  
    757 static void append(char** dest, char* src) { 
    758   int i = strlen(src); 
    759   for(;i>0; i--) { 
    760     *(*dest)++ = *src++; 
    761   } 
    762 
    763  
    764 static int extracttypeinfo(char** dest, char** id) { 
    765   if (**id == '\0') 
    766     return -1; 
    767   // Extract the type info: 
    768   switch (*(*id)++) { 
    769     // array, static array, dynamic array: 
    770   case 'A': case 'G': case 'H': 
    771     if (extracttypeinfo(dest, id) == -1) 
    772       return -1; 
    773     append(dest, "[]"); 
    774     return 1; 
    775     // pointer: 
    776   case 'P': 
    777     if (extracttypeinfo(dest, id) == -1) 
    778       return -1; 
    779     append(dest, "*"); 
    780     return 1; 
    781     // reference: 
    782   case 'R': 
    783     if (extracttypeinfo(dest, id) == -1) 
    784       return -1; 
    785     append(dest, "&"); 
    786     return 1; 
    787     // return value: 
    788   case 'Z': 
    789     return extracttypeinfo(dest, id); 
    790     // out: 
    791   case 'J': 
    792     append(dest, "out "); 
    793     return extracttypeinfo(dest, id); 
    794     // inout: 
    795   case 'K': 
    796     append(dest, "inout "); 
    797     return extracttypeinfo(dest, id); 
    798      
    799     // enum: 
    800   case 'E': case 'T': case 'D': case 'C': case 'S': case 'I': 
    801     return extractidentifiers(dest, id); 
    802      
    803     // basic types: 
    804   case 'n': append(dest, "none"); return 1;  // ever used? 
    805   case 'v': append(dest, "void"); return 1; 
    806   case 'g': append(dest, "byte"); return 1; 
    807   case 'h': append(dest, "ubyte"); return 1; 
    808   case 's': append(dest, "short"); return 1; 
    809   case 't': append(dest, "ushort"); return 1; 
    810   case 'i': append(dest, "int"); return 1; 
    811   case 'k': append(dest, "uint"); return 1; 
    812   case 'l': append(dest, "long"); return 1; 
    813   case 'm': append(dest, "ulong"); return 1; 
    814   case 'f': append(dest, "float"); return 1; 
    815   case 'd': append(dest, "double"); return 1; 
    816   case 'e': append(dest, "real"); return 1; 
    817  
    818   // imaginary and complex: 
    819   case 'o': append(dest, "ifloat"); return 1; 
    820   case 'p': append(dest, "idouble"); return 1; 
    821   case 'j': append(dest, "ireal"); return 1; 
    822   case 'q': append(dest, "cfloat"); return 1; 
    823   case 'r': append(dest, "cdouble"); return 1; 
    824   case 'c': append(dest, "creal"); return 1; 
    825  
    826   // other types: 
    827   case 'b': append(dest, "bit"); return 1; 
    828   case 'a': append(dest, "char"); return 1; 
    829   case 'u': append(dest, "wchar"); return 1; 
    830   case 'w': append(dest, "dchar"); return 1; 
    831  
    832   // typeinfo, error, instance: 
    833   case '@': return extractidentifiers(dest, id); // BUG: is this right? 
    834  
    835   default: append(dest, "unknown"); return 1; 
    836   } 
    837 
    838  
    839 char* d_demangle(char* mangled, int options) { 
    840   char *output = malloc(strlen(mangled)+20), *orig = output; 
    841   unsigned char isFunc = 0; 
    842   return NULL; 
    843   if (mangled == strstr(mangled, "_D")) { 
    844     mangled += 2; 
    845     isFunc = 1; 
    846   } else if (mangled == strstr(mangled, "__Class_")) { 
    847     mangled += 8; 
    848   } else if (mangled == strstr(mangled, "__init_")) { 
    849     mangled += 7; 
    850   } else if (mangled == strstr(mangled, "__vtbl_")) { 
    851     mangled += 7; 
    852   } else if (mangled == strstr(mangled, "__modctor_")) { 
    853     mangled += 10; 
    854   } else if (mangled == strstr(mangled, "__moddtor_")) { 
    855     mangled += 10; 
    856   } else if (mangled == strstr(mangled, "__ModuleInfo_")) { 
    857     mangled += 13; 
    858   } else { 
    859     free(orig); 
    860     return NULL; 
    861   } 
    862  
    863   if (extractidentifiers(&output, &mangled) < 0) { 
    864     free(orig); 
    865     return NULL; 
    866   } 
    867   append(&output, "("); 
    868   if (isFunc == 1 && *mangled == 'F') { 
    869     mangled++; 
    870     while (*mangled != '\0' && *mangled != 'Z') { 
    871       if (isFunc == 1) { 
    872     isFunc++; 
    873       } else { 
    874     append(&output, ", "); 
    875       } 
    876       if (extracttypeinfo(&output, &mangled) < 0) { 
    877     free(orig); 
    878     return NULL; 
    879       } 
    880     } 
    881   } 
    882   append(&output, ")"); 
    883  
    884   //Doesn't display the return type, but wouldn't be too hard to do. 
    885    
    886   *output = '\0'; 
    887   output = strdup(orig); 
    888   free(orig); 
    889   return output; 
    890 
    891  
    892 char* d_sym_demangle(const struct general_symbol_info *gsymbol) { 
    893   return d_demangle(gsymbol->name, 0); 
    894 
    895  
    896 const struct language_defn d_language_defn = 
    897 
    898   "d",              /* Language name */ 
    899   language_d, 
     699
     700  "minimal",            /* Language name */ 
     701  language_minimal, 
    900702  NULL, 
    901703  range_check_off, 
     
    918720  basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ 
    919721  basic_lookup_transparent_type,/* lookup_transparent_type */ 
    920   d_demangle,         /* Language specific symbol demangler */ 
     722  NULL,               /* Language specific symbol demangler */ 
    921723  NULL,             /* Language specific class_name_from_physname */ 
    922724  c_op_print_tab,       /* expression operators for printing */ 
     
    932734_initialize_c_language (void) 
    933735{ 
    934   add_language (&c_language_defn);  
    935   add_language (&d_language_defn); 
     736  add_language (&c_language_defn); 
    936737  add_language (&cplus_language_defn); 
    937738  add_language (&asm_language_defn); 
  • trunk/gdb/c-lang.h

    r5 r7  
    2929#include "value.h" 
    3030#include "macroexp.h" 
    31 #include "symtab.h" 
    3231 
    3332 
     
    9291 
    9392 
    94 /***************************** 
    95  D Language stuff 
    96 ******************************/ 
    97  
    98 char* d_demangle(char* mangled, int options); 
    99  
    100 char* d_sym_demangle(const struct general_symbol_info *gsymbol); 
    101  
    102  
    10393#endif /* !defined (C_LANG_H) */ 
  • trunk/gdb/defs.h

    r6 r7  
    191191    language_c,         /* C */ 
    192192    language_cplus,     /* C++ */ 
    193     language_d,                 /* D */ 
    194193    language_objc,      /* Objective-C */ 
    195194    language_java,      /* Java */ 
  • trunk/gdb/language.c

    r6 r7  
    554554    case language_c: 
    555555    case language_cplus: 
    556     case language_d: 
    557556    case language_objc: 
    558557      if (TYPE_CODE (t1) == TYPE_CODE_FLT) 
     
    666665    case language_c: 
    667666    case language_cplus: 
    668     case language_d: 
    669667    case language_objc: 
    670668      return (TYPE_CODE (type) != TYPE_CODE_INT) && 
     
    707705    case language_c: 
    708706    case language_cplus: 
    709     case language_d: 
    710707    case language_objc: 
    711708      return (TYPE_CODE (type) == TYPE_CODE_INT) && 
     
    730727    case language_c: 
    731728    case language_cplus: 
    732     case language_d: 
    733729    case language_objc: 
    734730      /* C does not have distinct string type. */ 
     
    750746    case language_c: 
    751747    case language_cplus: 
    752     case language_d: 
    753748    case language_objc: 
    754749      /* Might be more cleanly handled by having a 
     
    824819      return builtin_type_f_logical_s2; 
    825820    case language_cplus: 
    826     case language_d: 
    827821    case language_pascal: 
    828822      if (current_language->la_language==language_cplus) 
  • trunk/gdb/symfile.c

    r6 r7  
    21702170    xmalloc (fl_table_size * sizeof (*filename_language_table)); 
    21712171      add_filename_language (".c", language_c); 
    2172       add_filename_language (".d", language_d); 
    21732172      add_filename_language (".C", language_cplus); 
    21742173      add_filename_language (".cc", language_cplus); 
  • trunk/gdb/symtab.c

    r5 r7  
    4343#include "objc-lang.h" 
    4444#include "ada-lang.h" 
    45 #include "c-lang.h" 
    4645 
    4746#include "hashtab.h" 
     
    397396} 
    398397 
    399  
     398  
    400399/* Initialize the language dependent portion of a symbol 
    401400   depending upon the language for the symbol. */ 
     
    406405  gsymbol->language = language; 
    407406  if (gsymbol->language == language_cplus 
    408       || gsymbol->language == language_d 
    409407      || gsymbol->language == language_java 
    410408      || gsymbol->language == language_objc) 
     
    452450  if (gsymbol->language == language_unknown) 
    453451    gsymbol->language = language_auto; 
    454  
    455   if (gsymbol->language == language_d 
    456       || gsymbol->language == language_auto) { 
    457     demangled = d_demangle(mangled, 0); 
    458     if (demangled != NULL) { 
    459       gsymbol->language = language_d; 
    460       return demangled; 
    461     } 
    462   } 
    463452 
    464453  if (gsymbol->language == language_objc 
     
    621610  demangled = symbol_find_demangled_name (gsymbol, mangled); 
    622611  if (gsymbol->language == language_cplus 
    623       || gsymbol->language == language_d 
    624612      || gsymbol->language == language_java 
    625613      || gsymbol->language == language_objc) 
     
    651639    { 
    652640    case language_cplus: 
    653     case language_d: 
    654641    case language_java: 
    655642    case language_objc: 
     
    677664    { 
    678665    case language_cplus: 
    679     case language_d: 
    680666    case language_java: 
    681667    case language_objc: 
     
    10351021  modified_name = name; 
    10361022 
    1037   /* If we are using C++, D, or Java, demangle the name before doing a lookup, so 
     1023  /* If we are using C++ or Java, demangle the name before doing a lookup, so 
    10381024     we can always binary search. */ 
    10391025  if (current_language->la_language == language_cplus) 
    10401026    { 
    10411027      demangled_name = cplus_demangle (name, DMGL_ANSI | DMGL_PARAMS); 
    1042       if (demangled_name) 
    1043     { 
    1044       mangled_name = name; 
    1045       modified_name = demangled_name; 
    1046       needtofreename = 1; 
    1047     } 
    1048     } 
    1049   else if (current_language->la_language == language_d) 
    1050     { 
    1051       demangled_name = d_demangle (name, 0); 
    10521028      if (demangled_name) 
    10531029    {