@@ -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" 
783+       .Case (" code" 
784+       .Case (" resolver" 
785+       .Case (" data" 
786+       .Case (" trampoline" 
787+       .Case (" runtime" 
788+       .Case (" exception" 
789+       .Case (" sourcefile" 
790+       .Case (" headerfile" 
791+       .Case (" objectfile" 
792+       .Case (" commonblock" 
793+       .Case (" block" 
794+       .Case (" local" 
795+       .Case (" param" 
796+       .Case (" variable" 
797+       .Case (" variableType" 
798+       .Case (" lineentry" 
799+       .Case (" lineheader" 
800+       .Case (" scopebegin" 
801+       .Case (" scopeend" 
802+       .Case (" additional," 
803+       .Case (" compiler" 
804+       .Case (" instrumentation" 
805+       .Case (" undefined" 
806+       .Case (" objcclass" 
807+       .Case (" objcmetaclass" 
808+       .Case (" objcivar" 
809+       .Case (" reexported" 
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" 
809-                .Case (" code" 
810-                .Case (" resolver" 
811-                .Case (" data" 
812-                .Case (" trampoline" 
813-                .Case (" runtime" 
814-                .Case (" exception" 
815-                .Case (" sourcefile" 
816-                .Case (" headerfile" 
817-                .Case (" objectfile" 
818-                .Case (" commonblock" 
819-                .Case (" block" 
820-                .Case (" local" 
821-                .Case (" param" 
822-                .Case (" variable" 
823-                .Case (" variableType" 
824-                .Case (" lineentry" 
825-                .Case (" lineheader" 
826-                .Case (" scopebegin" 
827-                .Case (" scopeend" 
828-                .Case (" additional," 
829-                .Case (" compiler" 
830-                .Case (" instrumentation" 
831-                .Case (" undefined" 
832-                .Case (" objcclass" 
833-                .Case (" objcmetaClass" 
834-                .Case (" objcivar" 
835-                .Case (" reexporte" 
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