@@ -392,45 +392,8 @@ 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- 
399395const  char  *Symbol::GetTypeAsString () const  {
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>"  ;
396+   return  GetTypeAsString (static_cast <lldb::SymbolType>(m_type));
434397}
435398
436399void  Symbol::CalculateSymbolContext (SymbolContext *sc) {
@@ -774,6 +737,79 @@ bool Symbol::operator==(const Symbol &rhs) const {
774737  return  true ;
775738}
776739
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+ 
777813namespace  llvm  {
778814namespace  json  {
779815
@@ -804,36 +840,8 @@ bool fromJSON(const llvm::json::Value &value, lldb_private::JSONSymbol &symbol,
804840bool  fromJSON (const  llvm::json::Value &value, lldb::SymbolType &type,
805841              llvm::json::Path path) {
806842  if  (auto  str = value.getAsString ()) {
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);
843+     llvm::StringRef str_ref = str.value_or (" "  );
844+     type = Symbol::GetTypeFromString (str_ref.data ());
837845
838846    if  (type == eSymbolTypeInvalid) {
839847      path.report (" invalid symbol type"  );
0 commit comments