Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Demangle/DLangDemangle.cpp
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Lines | const char *Demangler::parseIdentifier(OutputBuffer *Demangled, | ||||
// TODO: Parse template instances with a length prefix. | // TODO: Parse template instances with a length prefix. | ||||
return parseLName(Demangled, Mangled, Len); | return parseLName(Demangled, Mangled, Len); | ||||
} | } | ||||
const char *Demangler::parseLName(OutputBuffer *Demangled, const char *Mangled, | const char *Demangler::parseLName(OutputBuffer *Demangled, const char *Mangled, | ||||
unsigned long Len) { | unsigned long Len) { | ||||
switch (Len) { | |||||
case 6: | |||||
if (strncmp(Mangled, "__initZ", Len + 1) == 0) { | |||||
// The static initializer for a given symbol. | |||||
Demangled->prepend("initializer for "); | |||||
Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); | |||||
Mangled += Len; | |||||
return Mangled; | |||||
} | |||||
if (strncmp(Mangled, "__vtblZ", Len + 1) == 0) { | |||||
// The vtable symbol for a given class. | |||||
Demangled->prepend("vtable for "); | |||||
Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); | |||||
Mangled += Len; | |||||
return Mangled; | |||||
} | |||||
break; | |||||
case 7: | |||||
if (strncmp(Mangled, "__ClassZ", Len + 1) == 0) { | |||||
// The classinfo symbol for a given class. | |||||
Demangled->prepend("ClassInfo for "); | |||||
Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); | |||||
Mangled += Len; | |||||
return Mangled; | |||||
} | |||||
break; | |||||
case 11: | |||||
if (strncmp(Mangled, "__InterfaceZ", Len + 1) == 0) { | |||||
// The interface symbol for a given class. | |||||
Demangled->prepend("Interface for "); | |||||
Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); | |||||
Mangled += Len; | |||||
return Mangled; | |||||
} | |||||
break; | |||||
case 12: | |||||
if (strncmp(Mangled, "__ModuleInfoZ", Len + 1) == 0) { | |||||
// The ModuleInfo symbol for a given module. | |||||
Demangled->prepend("ModuleInfo for "); | |||||
Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); | |||||
Mangled += Len; | |||||
return Mangled; | |||||
} | |||||
break; | |||||
} | |||||
*Demangled << StringView(Mangled, Len); | *Demangled << StringView(Mangled, Len); | ||||
Mangled += Len; | Mangled += Len; | ||||
return Mangled; | return Mangled; | ||||
} | } | ||||
Demangler::Demangler(const char *Mangled) : Str(Mangled) {} | Demangler::Demangler(const char *Mangled) : Str(Mangled) {} | ||||
Show All 37 Lines |