Skip to content

Commit 7c7f477

Browse files
committed
use symbol type as enum
1 parent b6f6766 commit 7c7f477

File tree

4 files changed

+117
-76
lines changed

4 files changed

+117
-76
lines changed

lldb/tools/lldb-dap/Handler/ModuleSymbolsRequestHandler.cpp

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -15,78 +15,12 @@
1515
#include "lldb/API/SBModule.h"
1616
#include "lldb/API/SBModuleSpec.h"
1717
#include "lldb/Utility/UUID.h"
18-
#include "lldb/lldb-enumerations.h"
1918
#include "llvm/Support/Error.h"
2019
#include <cstddef>
2120

2221
using namespace lldb_dap::protocol;
2322
namespace lldb_dap {
2423

25-
static std::string SymbolTypeToString(lldb::SymbolType symbol_type) {
26-
switch (symbol_type) {
27-
case lldb::eSymbolTypeInvalid:
28-
return "Invalid";
29-
case lldb::eSymbolTypeAbsolute:
30-
return "Absolute";
31-
case lldb::eSymbolTypeCode:
32-
return "Code";
33-
case lldb::eSymbolTypeResolver:
34-
return "Resolver";
35-
case lldb::eSymbolTypeData:
36-
return "Data";
37-
case lldb::eSymbolTypeTrampoline:
38-
return "Trampoline";
39-
case lldb::eSymbolTypeRuntime:
40-
return "Runtime";
41-
case lldb::eSymbolTypeException:
42-
return "Exception";
43-
case lldb::eSymbolTypeSourceFile:
44-
return "SourceFile";
45-
case lldb::eSymbolTypeHeaderFile:
46-
return "HeaderFile";
47-
case lldb::eSymbolTypeObjectFile:
48-
return "ObjectFile";
49-
case lldb::eSymbolTypeCommonBlock:
50-
return "CommonBlock";
51-
case lldb::eSymbolTypeBlock:
52-
return "Block";
53-
case lldb::eSymbolTypeLocal:
54-
return "Local";
55-
case lldb::eSymbolTypeParam:
56-
return "Param";
57-
case lldb::eSymbolTypeVariable:
58-
return "Variable";
59-
case lldb::eSymbolTypeVariableType:
60-
return "VariableType";
61-
case lldb::eSymbolTypeLineEntry:
62-
return "LineEntry";
63-
case lldb::eSymbolTypeLineHeader:
64-
return "LineHeader";
65-
case lldb::eSymbolTypeScopeBegin:
66-
return "ScopeBegin";
67-
case lldb::eSymbolTypeScopeEnd:
68-
return "ScopeEnd";
69-
case lldb::eSymbolTypeAdditional:
70-
return "Additional";
71-
case lldb::eSymbolTypeCompiler:
72-
return "Compiler";
73-
case lldb::eSymbolTypeInstrumentation:
74-
return "Instrumentation";
75-
case lldb::eSymbolTypeUndefined:
76-
return "Undefined";
77-
case lldb::eSymbolTypeObjCClass:
78-
return "ObjCClass";
79-
case lldb::eSymbolTypeObjCMetaClass:
80-
return "ObjCMetaClass";
81-
case lldb::eSymbolTypeObjCIVar:
82-
return "ObjCIVar";
83-
case lldb::eSymbolTypeReExported:
84-
return "ReExported";
85-
}
86-
87-
llvm_unreachable("unhandled symbol type.");
88-
}
89-
9024
llvm::Expected<ModuleSymbolsResponseBody>
9125
ModuleSymbolsRequestHandler::Run(const ModuleSymbolsArguments &args) const {
9226
ModuleSymbolsResponseBody response;
@@ -127,7 +61,7 @@ ModuleSymbolsRequestHandler::Run(const ModuleSymbolsArguments &args) const {
12761

12862
Symbol dap_symbol;
12963
dap_symbol.userId = symbol.GetID();
130-
dap_symbol.type = SymbolTypeToString(symbol.GetType());
64+
dap_symbol.type = symbol.GetType();
13165
dap_symbol.isDebug = symbol.IsDebug();
13266
dap_symbol.isSynthetic = symbol.IsSynthetic();
13367
dap_symbol.isExternal = symbol.IsExternal();

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

Lines changed: 113 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,110 @@
11
#include "Protocol/DAPTypes.h"
2+
#include "lldb/lldb-enumerations.h"
23

34
using namespace llvm;
45

56
namespace lldb_dap::protocol {
67

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+
7108
bool fromJSON(const llvm::json::Value &Params, PersistenceData &PD,
8109
llvm::json::Path P) {
9110
json::ObjectMapper O(Params, P);
@@ -35,12 +136,17 @@ llvm::json::Value toJSON(const SourceLLDBData &SLD) {
35136

36137
bool fromJSON(const llvm::json::Value &Params, Symbol &DS, llvm::json::Path P) {
37138
json::ObjectMapper O(Params, P);
38-
return O && O.map("userId", DS.userId) && O.map("isDebug", DS.isDebug) &&
39-
O.map("isSynthetic", DS.isSynthetic) &&
40-
O.map("isExternal", DS.isExternal) && O.map("type", DS.type) &&
41-
O.map("fileAddress", DS.fileAddress) &&
42-
O.mapOptional("loadAddress", DS.loadAddress) &&
43-
O.map("size", DS.size) && O.map("name", DS.name);
139+
std::string type_str;
140+
if (!(O && O.map("userId", DS.userId) && O.map("isDebug", DS.isDebug) &&
141+
O.map("isSynthetic", DS.isSynthetic) &&
142+
O.map("isExternal", DS.isExternal) && O.map("type", type_str) &&
143+
O.map("fileAddress", DS.fileAddress) &&
144+
O.mapOptional("loadAddress", DS.loadAddress) &&
145+
O.map("size", DS.size) && O.map("name", DS.name)))
146+
return false;
147+
148+
DS.type = StringToSymbolType(type_str);
149+
return true;
44150
}
45151

46152
llvm::json::Value toJSON(const Symbol &DS) {
@@ -49,7 +155,7 @@ llvm::json::Value toJSON(const Symbol &DS) {
49155
{"isDebug", DS.isDebug},
50156
{"isSynthetic", DS.isSynthetic},
51157
{"isExternal", DS.isExternal},
52-
{"type", DS.type},
158+
{"type", SymbolTypeToString(DS.type)},
53159
{"fileAddress", DS.fileAddress},
54160
{"loadAddress", DS.loadAddress},
55161
{"size", DS.size},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ struct Symbol {
6363
bool isExternal;
6464

6565
/// The symbol type.
66-
std::string type;
66+
lldb::SymbolType type;
6767

6868
/// The symbol file address.
6969
lldb::addr_t fileAddress;

lldb/unittests/DAP/DAPTypesTest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "Protocol/DAPTypes.h"
1010
#include "TestingSupport/TestUtilities.h"
11+
#include "lldb/lldb-enumerations.h"
1112
#include "llvm/Testing/Support/Error.h"
1213
#include "gtest/gtest.h"
1314
#include <optional>
@@ -38,7 +39,7 @@ TEST(DAPTypesTest, DAPSymbol) {
3839
symbol.isDebug = true;
3940
symbol.isExternal = false;
4041
symbol.isSynthetic = true;
41-
symbol.type = "Trampoline";
42+
symbol.type = lldb::eSymbolTypeTrampoline;
4243
symbol.fileAddress = 0x12345678;
4344
symbol.loadAddress = 0x87654321;
4445
symbol.size = 64;

0 commit comments

Comments
 (0)