@@ -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