Changeset 9
- Timestamp:
- 04/03/05 22:31:40 (4 years ago)
- Files:
-
- trunk/gdb/c-lang.c (modified) (3 diffs)
- trunk/gdb/c-lang.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/gdb/c-lang.c
r8 r9 837 837 } 838 838 839 char* d_demangle(char* mangled, int options) { 839 char* d_demangle(const char* mangled, int options) { 840 char *symbol = mangled; 840 841 char *output = malloc(strlen(mangled)+20), *orig = output; 841 842 unsigned char isFunc = 0; 842 return NULL; 843 if (mangled == strstr(mangled, "_D")) { 844 mangled += 2; 843 if (mangled == NULL) { 844 free(output); 845 return NULL; 846 } else if (strcmp(mangled, "_Dmain") == 0) { 847 free(output); 848 return strdup("D main"); 849 } 850 if (symbol == strstr(symbol, "_D")) { 851 symbol += 2; 845 852 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;853 } else if (symbol == strstr(symbol, "__Class_")) { 854 symbol += 8; 855 } else if (symbol == strstr(symbol, "__init_")) { 856 symbol += 7; 857 } else if (symbol == strstr(symbol, "__vtbl_")) { 858 symbol += 7; 859 } else if (symbol == strstr(symbol, "__modctor_")) { 860 symbol += 10; 861 } else if (symbol == strstr(symbol, "__moddtor_")) { 862 symbol += 10; 863 } else if (symbol == strstr(symbol, "__ModuleInfo_")) { 864 symbol += 13; 858 865 } else { 859 866 free(orig); … … 861 868 } 862 869 863 if (extractidentifiers(&output, & mangled) < 0) {870 if (extractidentifiers(&output, &symbol) < 0) { 864 871 free(orig); 865 872 return NULL; 866 873 } 867 874 append(&output, "("); 868 if (isFunc == 1 && * mangled== 'F') {869 mangled++;870 while (* mangled != '\0' && *mangled!= 'Z') {875 if (isFunc == 1 && *symbol == 'F') { 876 symbol++; 877 while (*symbol != '\0' && *symbol != 'Z') { 871 878 if (isFunc == 1) { 872 879 isFunc++; … … 874 881 append(&output, ", "); 875 882 } 876 if (extracttypeinfo(&output, & mangled) < 0) {883 if (extracttypeinfo(&output, &symbol) < 0) { 877 884 free(orig); 878 885 return NULL; trunk/gdb/c-lang.h
r8 r9 96 96 ******************************/ 97 97 98 char* d_demangle(c har* mangled, int options);98 char* d_demangle(const char* mangled, int options); 99 99 100 100 char* d_sym_demangle(const struct general_symbol_info *gsymbol);
