Skip to content

Commit 300819c

Browse files
committed
export Symbol::GetTypeAsString and Symbol::GetTypeFromString
1 parent ca40bc1 commit 300819c

File tree

5 files changed

+98
-170
lines changed

5 files changed

+98
-170
lines changed

lldb/include/lldb/API/SBSymbol.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ class LLDB_API SBSymbol {
108108
/// Returns true if the symbol is a debug symbol.
109109
bool IsDebug();
110110

111+
/// Get the string representation of a symbol type.
112+
static const char *GetTypeAsString(lldb::SymbolType symbol_type);
113+
114+
/// Get the symbol type from a string representation.
115+
static lldb::SymbolType GetTypeFromString(const char *str);
116+
111117
protected:
112118
lldb_private::Symbol *get();
113119

lldb/include/lldb/Symbol/Symbol.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "lldb/Symbol/SymbolContextScope.h"
1616
#include "lldb/Utility/Stream.h"
1717
#include "lldb/Utility/UserID.h"
18+
#include "lldb/lldb-enumerations.h"
1819
#include "lldb/lldb-private.h"
1920
#include "llvm/Support/JSON.h"
2021

@@ -301,6 +302,10 @@ class Symbol : public SymbolContextScope {
301302

302303
bool operator==(const Symbol &rhs) const;
303304

305+
static const char *GetTypeAsString(lldb::SymbolType symbol_type);
306+
307+
static lldb::SymbolType GetTypeFromString(const char *str);
308+
304309
protected:
305310
// This is the internal guts of ResolveReExportedSymbol, it assumes
306311
// reexport_name is not null, and that module_spec is valid. We track the

lldb/source/API/SBSymbol.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,3 +224,11 @@ bool SBSymbol::IsDebug() {
224224
return m_opaque_ptr->IsDebug();
225225
return false;
226226
}
227+
228+
const char *SBSymbol::GetTypeAsString(lldb::SymbolType symbol_type) {
229+
return Symbol::GetTypeAsString(symbol_type);
230+
}
231+
232+
lldb::SymbolType SBSymbol::GetTypeFromString(const char *str) {
233+
return Symbol::GetTypeFromString(str);
234+
}

lldb/source/Symbol/Symbol.cpp

Lines changed: 76 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
399395
const 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

436399
void 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+
777813
namespace llvm {
778814
namespace json {
779815

@@ -804,36 +840,8 @@ bool fromJSON(const llvm::json::Value &value, lldb_private::JSONSymbol &symbol,
804840
bool 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");

lldb/tools/lldb-dap/Protocol/DAPTypes.cpp

Lines changed: 3 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,11 @@
11
#include "Protocol/DAPTypes.h"
2+
#include "lldb/API/SBSymbol.h"
23
#include "lldb/lldb-enumerations.h"
34

45
using namespace llvm;
56

67
namespace lldb_dap::protocol {
78

8-
static std::string SymbolTypeToString(lldb::SymbolType symbol_type) {
9-
switch (symbol_type) {
10-
case lldb::eSymbolTypeInvalid:
11-
return "Invalid";
12-
case lldb::eSymbolTypeAbsolute:
13-
return "Absolute";
14-
case lldb::eSymbolTypeCode:
15-
return "Code";
16-
case lldb::eSymbolTypeResolver:
17-
return "Resolver";
18-
case lldb::eSymbolTypeData:
19-
return "Data";
20-
case lldb::eSymbolTypeTrampoline:
21-
return "Trampoline";
22-
case lldb::eSymbolTypeRuntime:
23-
return "Runtime";
24-
case lldb::eSymbolTypeException:
25-
return "Exception";
26-
case lldb::eSymbolTypeSourceFile:
27-
return "SourceFile";
28-
case lldb::eSymbolTypeHeaderFile:
29-
return "HeaderFile";
30-
case lldb::eSymbolTypeObjectFile:
31-
return "ObjectFile";
32-
case lldb::eSymbolTypeCommonBlock:
33-
return "CommonBlock";
34-
case lldb::eSymbolTypeBlock:
35-
return "Block";
36-
case lldb::eSymbolTypeLocal:
37-
return "Local";
38-
case lldb::eSymbolTypeParam:
39-
return "Param";
40-
case lldb::eSymbolTypeVariable:
41-
return "Variable";
42-
case lldb::eSymbolTypeVariableType:
43-
return "VariableType";
44-
case lldb::eSymbolTypeLineEntry:
45-
return "LineEntry";
46-
case lldb::eSymbolTypeLineHeader:
47-
return "LineHeader";
48-
case lldb::eSymbolTypeScopeBegin:
49-
return "ScopeBegin";
50-
case lldb::eSymbolTypeScopeEnd:
51-
return "ScopeEnd";
52-
case lldb::eSymbolTypeAdditional:
53-
return "Additional";
54-
case lldb::eSymbolTypeCompiler:
55-
return "Compiler";
56-
case lldb::eSymbolTypeInstrumentation:
57-
return "Instrumentation";
58-
case lldb::eSymbolTypeUndefined:
59-
return "Undefined";
60-
case lldb::eSymbolTypeObjCClass:
61-
return "ObjCClass";
62-
case lldb::eSymbolTypeObjCMetaClass:
63-
return "ObjCMetaClass";
64-
case lldb::eSymbolTypeObjCIVar:
65-
return "ObjCIVar";
66-
case lldb::eSymbolTypeReExported:
67-
return "ReExported";
68-
}
69-
70-
llvm_unreachable("unhandled symbol type.");
71-
}
72-
73-
static lldb::SymbolType StringToSymbolType(const std::string &symbol_type) {
74-
return llvm::StringSwitch<lldb::SymbolType>(symbol_type)
75-
.Case("Invalid", lldb::eSymbolTypeInvalid)
76-
.Case("Absolute", lldb::eSymbolTypeAbsolute)
77-
.Case("Code", lldb::eSymbolTypeCode)
78-
.Case("Resolver", lldb::eSymbolTypeResolver)
79-
.Case("Data", lldb::eSymbolTypeData)
80-
.Case("Trampoline", lldb::eSymbolTypeTrampoline)
81-
.Case("Runtime", lldb::eSymbolTypeRuntime)
82-
.Case("Exception", lldb::eSymbolTypeException)
83-
.Case("SourceFile", lldb::eSymbolTypeSourceFile)
84-
.Case("HeaderFile", lldb::eSymbolTypeHeaderFile)
85-
.Case("ObjectFile", lldb::eSymbolTypeObjectFile)
86-
.Case("CommonBlock", lldb::eSymbolTypeCommonBlock)
87-
.Case("Block", lldb::eSymbolTypeBlock)
88-
.Case("Local", lldb::eSymbolTypeLocal)
89-
.Case("Param", lldb::eSymbolTypeParam)
90-
.Case("Variable", lldb::eSymbolTypeVariable)
91-
.Case("VariableType", lldb::eSymbolTypeVariableType)
92-
.Case("LineEntry", lldb::eSymbolTypeLineEntry)
93-
.Case("LineHeader", lldb::eSymbolTypeLineHeader)
94-
.Case("ScopeBegin", lldb::eSymbolTypeScopeBegin)
95-
.Case("ScopeEnd", lldb::eSymbolTypeScopeEnd)
96-
.Case("Additional", lldb::eSymbolTypeAdditional)
97-
.Case("Compiler", lldb::eSymbolTypeCompiler)
98-
.Case("Instrumentation", lldb::eSymbolTypeInstrumentation)
99-
.Case("Undefined", lldb::eSymbolTypeUndefined)
100-
.Case("ObjCClass", lldb::eSymbolTypeObjCClass)
101-
.Case("ObjCMetaClass", lldb::eSymbolTypeObjCMetaClass)
102-
.Case("ObjCIVar", lldb::eSymbolTypeObjCIVar)
103-
.Case("ReExported", lldb::eSymbolTypeReExported)
104-
105-
.Default(lldb::eSymbolTypeInvalid);
106-
}
107-
1089
bool fromJSON(const llvm::json::Value &Params, PersistenceData &PD,
10910
llvm::json::Path P) {
11011
json::ObjectMapper O(Params, P);
@@ -145,7 +46,7 @@ bool fromJSON(const llvm::json::Value &Params, Symbol &DS, llvm::json::Path P) {
14546
O.map("size", DS.size) && O.map("name", DS.name)))
14647
return false;
14748

148-
DS.type = StringToSymbolType(type_str);
49+
DS.type = lldb::SBSymbol::GetTypeFromString(type_str.c_str());
14950
return true;
15051
}
15152

@@ -155,7 +56,7 @@ llvm::json::Value toJSON(const Symbol &DS) {
15556
{"isDebug", DS.isDebug},
15657
{"isSynthetic", DS.isSynthetic},
15758
{"isExternal", DS.isExternal},
158-
{"type", SymbolTypeToString(DS.type)},
59+
{"type", lldb::SBSymbol::GetTypeAsString(DS.type)},
15960
{"fileAddress", DS.fileAddress},
16061
{"loadAddress", DS.loadAddress},
16162
{"size", DS.size},

0 commit comments

Comments
 (0)