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