@@ -392,8 +392,45 @@ bool Symbol::Compare(ConstString name, SymbolType type) const {
392392 return false ;
393393}
394394
395+ #define ENUM_TO_CSTRING (x ) \
396+ case eSymbolType##x: \
397+ return #x;
398+
395399const char *Symbol::GetTypeAsString () const {
396- return GetTypeAsString (static_cast <lldb::SymbolType>(m_type));
400+ switch (m_type) {
401+ ENUM_TO_CSTRING (Invalid);
402+ ENUM_TO_CSTRING (Absolute);
403+ ENUM_TO_CSTRING (Code);
404+ ENUM_TO_CSTRING (Resolver);
405+ ENUM_TO_CSTRING (Data);
406+ ENUM_TO_CSTRING (Trampoline);
407+ ENUM_TO_CSTRING (Runtime);
408+ ENUM_TO_CSTRING (Exception);
409+ ENUM_TO_CSTRING (SourceFile);
410+ ENUM_TO_CSTRING (HeaderFile);
411+ ENUM_TO_CSTRING (ObjectFile);
412+ ENUM_TO_CSTRING (CommonBlock);
413+ ENUM_TO_CSTRING (Block);
414+ ENUM_TO_CSTRING (Local);
415+ ENUM_TO_CSTRING (Param);
416+ ENUM_TO_CSTRING (Variable);
417+ ENUM_TO_CSTRING (VariableType);
418+ ENUM_TO_CSTRING (LineEntry);
419+ ENUM_TO_CSTRING (LineHeader);
420+ ENUM_TO_CSTRING (ScopeBegin);
421+ ENUM_TO_CSTRING (ScopeEnd);
422+ ENUM_TO_CSTRING (Additional);
423+ ENUM_TO_CSTRING (Compiler);
424+ ENUM_TO_CSTRING (Instrumentation);
425+ ENUM_TO_CSTRING (Undefined);
426+ ENUM_TO_CSTRING (ObjCClass);
427+ ENUM_TO_CSTRING (ObjCMetaClass);
428+ ENUM_TO_CSTRING (ObjCIVar);
429+ ENUM_TO_CSTRING (ReExported);
430+ default :
431+ break ;
432+ }
433+ return " <unknown SymbolType>" ;
397434}
398435
399436void Symbol::CalculateSymbolContext (SymbolContext *sc) {
@@ -737,79 +774,6 @@ bool Symbol::operator==(const Symbol &rhs) const {
737774 return true ;
738775}
739776
740- #define ENUM_TO_CSTRING (x ) \
741- case eSymbolType##x: \
742- return #x;
743-
744- const char *Symbol::GetTypeAsString (lldb::SymbolType symbol_type) {
745- switch (symbol_type) {
746- ENUM_TO_CSTRING (Invalid);
747- ENUM_TO_CSTRING (Absolute);
748- ENUM_TO_CSTRING (Code);
749- ENUM_TO_CSTRING (Resolver);
750- ENUM_TO_CSTRING (Data);
751- ENUM_TO_CSTRING (Trampoline);
752- ENUM_TO_CSTRING (Runtime);
753- ENUM_TO_CSTRING (Exception);
754- ENUM_TO_CSTRING (SourceFile);
755- ENUM_TO_CSTRING (HeaderFile);
756- ENUM_TO_CSTRING (ObjectFile);
757- ENUM_TO_CSTRING (CommonBlock);
758- ENUM_TO_CSTRING (Block);
759- ENUM_TO_CSTRING (Local);
760- ENUM_TO_CSTRING (Param);
761- ENUM_TO_CSTRING (Variable);
762- ENUM_TO_CSTRING (VariableType);
763- ENUM_TO_CSTRING (LineEntry);
764- ENUM_TO_CSTRING (LineHeader);
765- ENUM_TO_CSTRING (ScopeBegin);
766- ENUM_TO_CSTRING (ScopeEnd);
767- ENUM_TO_CSTRING (Additional);
768- ENUM_TO_CSTRING (Compiler);
769- ENUM_TO_CSTRING (Instrumentation);
770- ENUM_TO_CSTRING (Undefined);
771- ENUM_TO_CSTRING (ObjCClass);
772- ENUM_TO_CSTRING (ObjCMetaClass);
773- ENUM_TO_CSTRING (ObjCIVar);
774- ENUM_TO_CSTRING (ReExported);
775- }
776- return " <unknown SymbolType>" ;
777- }
778-
779- lldb::SymbolType Symbol::GetTypeFromString (const char *str) {
780- std::string str_lower = llvm::StringRef (str).lower ();
781- return llvm::StringSwitch<lldb::SymbolType>(str_lower)
782- .Case (" absolute" , eSymbolTypeAbsolute)
783- .Case (" code" , eSymbolTypeCode)
784- .Case (" resolver" , eSymbolTypeResolver)
785- .Case (" data" , eSymbolTypeData)
786- .Case (" trampoline" , eSymbolTypeTrampoline)
787- .Case (" runtime" , eSymbolTypeRuntime)
788- .Case (" exception" , eSymbolTypeException)
789- .Case (" sourcefile" , eSymbolTypeSourceFile)
790- .Case (" headerfile" , eSymbolTypeHeaderFile)
791- .Case (" objectfile" , eSymbolTypeObjectFile)
792- .Case (" commonblock" , eSymbolTypeCommonBlock)
793- .Case (" block" , eSymbolTypeBlock)
794- .Case (" local" , eSymbolTypeLocal)
795- .Case (" param" , eSymbolTypeParam)
796- .Case (" variable" , eSymbolTypeVariable)
797- .Case (" variableType" , eSymbolTypeVariableType)
798- .Case (" lineentry" , eSymbolTypeLineEntry)
799- .Case (" lineheader" , eSymbolTypeLineHeader)
800- .Case (" scopebegin" , eSymbolTypeScopeBegin)
801- .Case (" scopeend" , eSymbolTypeScopeEnd)
802- .Case (" additional," , eSymbolTypeAdditional)
803- .Case (" compiler" , eSymbolTypeCompiler)
804- .Case (" instrumentation" , eSymbolTypeInstrumentation)
805- .Case (" undefined" , eSymbolTypeUndefined)
806- .Case (" objcclass" , eSymbolTypeObjCClass)
807- .Case (" objcmetaclass" , eSymbolTypeObjCMetaClass)
808- .Case (" objcivar" , eSymbolTypeObjCIVar)
809- .Case (" reexported" , eSymbolTypeReExported)
810- .Default (eSymbolTypeInvalid);
811- }
812-
813777namespace llvm {
814778namespace json {
815779
@@ -840,8 +804,36 @@ bool fromJSON(const llvm::json::Value &value, lldb_private::JSONSymbol &symbol,
840804bool fromJSON (const llvm::json::Value &value, lldb::SymbolType &type,
841805 llvm::json::Path path) {
842806 if (auto str = value.getAsString ()) {
843- llvm::StringRef str_ref = str.value_or (" " );
844- type = Symbol::GetTypeFromString (str_ref.data ());
807+ type = llvm::StringSwitch<lldb::SymbolType>(*str)
808+ .Case (" absolute" , eSymbolTypeAbsolute)
809+ .Case (" code" , eSymbolTypeCode)
810+ .Case (" resolver" , eSymbolTypeResolver)
811+ .Case (" data" , eSymbolTypeData)
812+ .Case (" trampoline" , eSymbolTypeTrampoline)
813+ .Case (" runtime" , eSymbolTypeRuntime)
814+ .Case (" exception" , eSymbolTypeException)
815+ .Case (" sourcefile" , eSymbolTypeSourceFile)
816+ .Case (" headerfile" , eSymbolTypeHeaderFile)
817+ .Case (" objectfile" , eSymbolTypeObjectFile)
818+ .Case (" commonblock" , eSymbolTypeCommonBlock)
819+ .Case (" block" , eSymbolTypeBlock)
820+ .Case (" local" , eSymbolTypeLocal)
821+ .Case (" param" , eSymbolTypeParam)
822+ .Case (" variable" , eSymbolTypeVariable)
823+ .Case (" variableType" , eSymbolTypeVariableType)
824+ .Case (" lineentry" , eSymbolTypeLineEntry)
825+ .Case (" lineheader" , eSymbolTypeLineHeader)
826+ .Case (" scopebegin" , eSymbolTypeScopeBegin)
827+ .Case (" scopeend" , eSymbolTypeScopeEnd)
828+ .Case (" additional," , eSymbolTypeAdditional)
829+ .Case (" compiler" , eSymbolTypeCompiler)
830+ .Case (" instrumentation" , eSymbolTypeInstrumentation)
831+ .Case (" undefined" , eSymbolTypeUndefined)
832+ .Case (" objcclass" , eSymbolTypeObjCClass)
833+ .Case (" objcmetaClass" , eSymbolTypeObjCMetaClass)
834+ .Case (" objcivar" , eSymbolTypeObjCIVar)
835+ .Case (" reexporte" , eSymbolTypeReExported)
836+ .Default (eSymbolTypeInvalid);
845837
846838 if (type == eSymbolTypeInvalid) {
847839 path.report (" invalid symbol type" );
0 commit comments