11#include " Protocol/DAPTypes.h"
2+ #include " lldb/lldb-enumerations.h"
23
34using namespace llvm ;
45
56namespace 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+
7108bool 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
36137bool 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
46152llvm::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 },
0 commit comments